如何获得随机日期和时间C#

本文关键字:时间 日期 何获得 随机 | 更新日期: 2023-09-27 18:25:19

我正在尝试编写一个代码,生成随机日期和时间,其中(yyyy-mm-dd hh:mm:ss)的所有值都会更改

我使用了这个代码,但它只更改日期并固定时间

 DateTime RandomDay()
        {
            DateTime start = new DateTime(2013, 1, 1 , 1 , 1 ,1);
            Random gen = new Random();
            int range = (DateTime.Today - start).Days;
            return start.AddDays(gen.Next(range));
        }

我说可以,如果我写一个代码来生成随机日期,并将其存储在variable1中,然后写另一个代码生成随机时间,并将它存储在variable 2中,然后只从variable1选择日期,只从variable 2中选择时间,然后将variable1和variable2组合在一起,这样我就可以生成随机日期和时间因此,我编写了另一种生成时间的方法

DateTime RandomTime()
        {
            DateTime start = new DateTime(2013, 1, 1, 1, 1, 1);
            Random gen = new Random();
            int range = (DateTime.Today - start).Hours;
            return start.AddHours(gen.Next(range));
        }

现在RandomTime方法的问题是,它只生成随机小时,不会改变分钟和秒的值,

有什么建议可以解决代码问题吗?是否有生成所有(yyyy-mm-dd hh:mm:ss)的随机值的方法?

如何获得随机日期和时间C#

这里有一个方法,它将随机生成日期和时间的每一部分。

它使用了适当的限制,因此生成的日期是有效的(1-999年内的年,1-12年内的月,调用DateTime.DaysInMonth,这样我们就不会在2月31日结束,等等)

public IEnumerable<DateTime> GenerateRandomDates(int numberOfDates)
{
    var rnd = new Random(Guid.NewGuid().GetHashCode());
    for (int i = 0; i < numberOfDates; i++)
    {
        var year = rnd.Next(1, 10000);
        var month = rnd.Next(1, 13);
        var days = rnd.Next(1, DateTime.DaysInMonth(year, month) + 1);
        yield return new DateTime(year, month, days,
            rnd.Next(0, 24), rnd.Next(0, 60), rnd.Next(0, 60), rnd.Next(0, 1000));
    }
}

生成10000个:

var randomDateTimes = GenerateRandomDates(10000);

这是一行解决方案。返回部分为1行;)

private static Random _ran = new Random();
public static DateTime RandomDateTime()
{
    return
        DateTime.MinValue.Add(
            TimeSpan.FromTicks((long) (_ran.NextDouble()*DateTime.MaxValue.Ticks)));
}

注1:_ran.NextDouble()给出0到1之间的随机值。所以添加到最短日期时间的刻度数将在0DateTime.MaxValue.Ticks之间。因此,随机日期时间将介于最小日期时间和最大日期时间之间。

注2:DateTime.Min.Ticks等于0。因此,即使添加了最长日期时间刻度,这个过程也永远不会溢出。


以下是如何生成10k个随机日期时间。

DateTime[] datetimes = new DateTime[10000];
for (int i = 0; i < datetimes.Length; i++)
{
    datetimes[i] = RandomDateTime();
}

如果要定义范围,也可以使用此方法。

public static DateTime RandomDateTime(DateTime min, DateTime max)
{
    return
        DateTime.MinValue.Add(
            TimeSpan.FromTicks(min.Ticks + (long) (_ran.NextDouble()*(max.Ticks - min.Ticks))));
}