我正在尝试将值随机化为一个简单的DateTime数据字段.
我希望获得两个日期/时间之间的随机日期/时间(例如,最小日期/时间和最大日期/时间).
所以让我们想象一下我之间的随机日期/时间
1/1/2000 10:00:00am和1/1/2000 5:00:00pm.
此外,此代码将用于for循环,包含100个项目...意味着所有100个项目将具有最小/最大日期/时间段之间的随机日期/时间.
有任何想法吗?
我实现了下面的RandomDate,但我总是让值关闭到"从"日期,我可能会错过这里的东西....
public static DateTime GetRandomDate(DateTime from, DateTime to)
{
var range = new TimeSpan(to.Ticks - from.Ticks);
var rnd = new Random();
var randTimeSpan = new TimeSpan((long)(range.TotalSeconds - rnd.Next(0, (int)range.TotalSeconds)));
return from + randTimeSpan;
}
Run Code Online (Sandbox Code Playgroud) 注意:为简洁起见,以下内容无法区分随机性和伪随机性.此外,在此上下文中,约束意味着给定的最小值和最大值之间)
本System.Random类提供随机生成整数,双打和字节数组.使用Random.Next,可以轻松生成类型为布尔值,字符,(S)字节,(U)Int16,(U)Int32的随机约束值.使用时Random.NextDouble(),可以类似地生成Double和Single类型的约束值(就我对此类型的理解而言).随机串生成(给定长度和字母的)已经 也 被 解决 之前.
考虑剩余的原始数据类型(不包括Object):Decimal和(U)Int64.他们的随机生成也已被解决(Decimal,(U)Int64使用Random.NextBytes()),但不受限制.理论上可以使用拒绝采样(即循环直到生成的值是所需范围),但这显然不是一个实际的解决方案.归一化NextDouble()不起作用,因为它没有足够的有效数字.
简而言之,我要求正确实现以下功能:
long NextLong(long min, long max)
long NextDecimal(decimal min, decimal max)
Run Code Online (Sandbox Code Playgroud)
请注意,由于System.DateTime基于ulong,第一个函数也允许随机约束生成此类结构(类似于此处,仅在刻度而不是分钟内).
我正在自动化一个应用程序,可以在指定的日期范围之间打开记录.我知道我可以创建一个随机选择数组中数字的数组,例如:
DateTime.Now.AddDays(90).ToString("MM/dd/yyyy")
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有更好的方法来解决这个问题.请帮忙!谢谢.