从现在到2天前,以小时和分钟获取随机日期

时间:2018-10-23 20:05:18

标签: c#

嗨,我如何获得一个随机的日期,包括现在和2或3天之间的小时和分钟。 ??

感谢所有人

类似这样的日期以分钟为单位

2018/10/23下午4:32:00

2018/10/23下午5:31:00

10/23/2018 1:32:00 AM

10/22/2018 2:00:00 PM

在这里我可以得到一个范围内的日期,可以说是2天,但是小时是相同的。

public static DateTime NextDateTime(int endDatenumbers)
{
    DateTime startDate = DateTime.Today;

    DateTime endDate = startDate.AddDays(-endDatenumbers);

    var newDate = startDate.AddHours(new Random(Convert.ToInt32(DateTime.Now.Ticks / int.MaxValue)).Next(0, (int)(endDate - startDate).TotalHours));

    return newDate;
}

2 个答案:

答案 0 :(得分:2)

您应该将其简化为1个随机调用。 取得3天前最远的一天。

var furthestDate= DateTime.Today.AddDays(-3);

您的范围实际上是该日期之后的2天,即(48小时* 60分钟)= 2880分钟。 因此,从该日期到2880分钟后的任何内容都是有效的。 只需获得0到2880之间的1个随机数。最后只需将分钟数添加到最远的日期即可。

var randomDate = furthestDate.AddMinutes(YouRandomNumber);

答案 1 :(得分:1)

以下逻辑实际上计算了两天之间的分钟数。当您的日子有可能跨越夏时制界限时,这一点很重要。另外,我将“ today”值存储为技术上(尽管不太可能)的值,它可能在两次调用之间发生变化。

    private static DateTime PickRandomMinute(int inPastNDays, Random random)
    {
        DateTime today = DateTime.Today;
        int totalMinutes = (int)(today - today.AddDays(-inPastNDays)).TotalMinutes;
        return today.AddDays(-inPastNDays).AddMinutes(random.Next(totalMinutes));
    }

用法示例:

        Random random = new Random();
        Console.WriteLine(PickRandomMinute(2, random)); // 22/10/2018 9:34:00 PM (for example)
        Console.WriteLine(PickRandomMinute(2, random)); // 23/10/2018 4:55:00 AM (for example)

您不想在此方法中创建新的Random,因为非常紧密地发生的调用可能会以相同的种子结束并因此返回相同的时间。