[英]C# Generate 5 random times between 08:20:00 and 08:29:59
我需要在 08:20:00 到 08:29:59 之间生成 5 个随机时间。
这些时间需要从左到右添加到顶部文本框中。
我目前正在使用以下代码进行操作:
private void Button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
Random random = new Random();
TimeSpan start = TimeSpan.FromHours(08.20);
TimeSpan end = TimeSpan.FromHours(08.30);
int maxMinutes = (int)((end - start).TotalMinutes);
for (int i = 0; i < 5; ++i)
{
int minutes = random.Next(maxMinutes);
TimeSpan t = start.Add(TimeSpan.FromMinutes(minutes));
listBox1.Items.Add(t);
}
}
这就是它的样子。
目前,它没有在时间范围内生成它们,也不包括关键的秒数。 我还需要一个解决方案将它们添加到它们的插槽中。
1st generated needs to go into monday_In, 2nd needs to go into tuesday_In, 3rd needs to go to wednesday_In, 4th needs to go to thursday_In, 5th needs to go to friday_In
关于如何做到这一点的任何想法?
首先,8.20 小时不是 8 小时 20 分钟。 这是8小时12分钟。 同样,8.30 小时是 8 小时 18 分钟。
所以你应该改变初始化开始和结束时间的方式:
var start = new TimeSpan(8, 20, 0);
var end = new TimeSpan(8, 30, 0);
其次,如果要在生成随机时间时获得秒精度,则需要以seconds为单位的差异,而不是分钟:
var secondsDifference = (int)(end.TotalSeconds - start.TotalSeconds);
要获得随机时间,您可以简单地执行startTime + x seconds
其中x
是0
和secondsDifference
之间的随机数:
for (int i = 0 ; i < 5 ; i++) {
var randomTime = start + TimeSpan.FromSeconds(random.Next(secondsDifference));
listBox1.Items.Add(randomTime);
}
private void Button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
Random random = new Random();
long start = TimeSpan.FromHours(08.20).Ticks;
long end = TimeSpan.FromHours(08.30).Ticks;
for (int i = 0; i < 5; ++i)
{
long ticks = random.NextLong(start, end);
TimeSpan t = TimeSpan.FromTicks(ticks);
listBox1.Items.Add(t);
}
}
编辑
忘了这是一个自定义扩展
public static long NextLong(this Random random, long minValue, long maxValue)
{
long dif = maxValue - minValue;
return (long)Math.Round((random.NextDouble() * dif) + minValue);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.