【问题标题】:C# Generate 5 random times between 08:20:00 and 08:29:59C# 在 08:20:00 和 08:29:59 之间生成 5 个随机时间
【发布时间】:2019-11-14 16:25:18
【问题描述】:

我需要在 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);
    }
}

这就是它的样子。

目前,它不会在时间范围内生成它们,也不包括关键的秒数。我还需要一个解决方案将它们添加到它们的插槽中。

第一个生成需要进入 monday_In,第 2 个需要进入 tuesday_In,第 3 个需要进入 wednesday_In,第 4 个需要进入 thursday_In,第 5 个需要进入 friday_In

关于如何做到这一点的任何想法?

【问题讨论】:

  • 提示可能足以让您继续前进:TimeSpan.FromHours(08.20) 没有按照您的想法行事。 8.2 小时是 8 小时 12 分钟。
  • “TimeSpan.FromMinutes”也不添加秒数。
  • 对,我一直在使用这个解决方案。 stackoverflow.com/questions/13590465/…
  • 另一方面,Random random = new Random(); 应该声明一次并重复使用,而不是每次单击按钮时。

标签: c# date random time


【解决方案1】:

首先,8.20 小时不是 8 小时 20 分钟。这是8小时12分钟。同样,8.30 小时是 8 小时 18 分钟。

所以你应该改变初始化开始和结束时间的方式:

var start = new TimeSpan(8, 20, 0);
var end = new TimeSpan(8, 30, 0);

其次,如果您想在生成随机时间时获得秒精度,则需要以 为单位的差异,而不是分钟:

var secondsDifference = (int)(end.TotalSeconds - start.TotalSeconds);

要获得随机时间,您可以简单地执行startTime + x seconds,其中x0secondsDifference 之间的随机数:

for (int i = 0 ; i < 5 ; i++) {
    var randomTime = start + TimeSpan.FromSeconds(random.Next(secondsDifference));
    listBox1.Items.Add(randomTime);
}

【讨论】:

    【解决方案2】:
    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);
    }
    

    【讨论】:

    • 那不行。 “Random”不包含“NextLong”的定义,并且找不到接受“Random”类型的第一个参数的可访问扩展方法“NextLong”。我会继续努力的。
    猜你喜欢
    • 2010-10-04
    • 2012-08-05
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2019-09-26
    相关资源
    最近更新 更多