【问题标题】:How can I generate random dates within a range? [duplicate]如何在一个范围内生成随机日期? [复制]
【发布时间】:2013-12-02 06:28:51
【问题描述】:

我正在自动化一个可以在指定日期范围内打开记录的应用程序。我知道我可以创建一个在我的数组中随机选取一个数字的数组,例如:

DateTime.Now.AddDays(90).ToString("MM/dd/yyyy")

但是,我想知道是否有更好的方法来解决这个问题。请帮忙!谢谢。

【问题讨论】:

标签: c# datetime


【解决方案1】:
void Main()
{   
    Console.WriteLine(DateTime.UtcNow.AddDays(new Random().Next(90)));
}

这将为开始日期添加随机天数,基本上以随机日期结束。

【讨论】:

  • 谢谢杰罗恩。当我添加 ToString 时,这对我有用,因为我需要它成为我的应用程序中的字符串。干得好!
【解决方案2】:

假设您希望日期在生成日期的 90 天范围内。然后,你可以试试这个:

int seed = (int)DateTime.Now.Ticks;
int days = seed % 90;
DateTime.Now.AddDays(days).ToString("MM/dd/yyyy");

当然,您可以重构它。为了清楚起见,我很冗长。您还可以将整数值 90 更改为您希望成为范围上限的任何整数。

希望这会有所帮助。

【讨论】:

  • 我建议不要使用 Ticks 来生成随机数。最多,它们应该是实随机数生成器的种子。滴答计数可能不够“平滑”,并且在重复使用时可能明显是非随机的。上面 Jeroen 的解决方案更好,因为 new Random() 默认使用 tickcount 作为种子。
  • 真的吗?否决票?为什么不直接投票你喜欢的答案? (他在我输入我的同时输入 - 顺便说一句)我的答案是正确的并且有效。 Random 对象与使用 Ticks 具有相同的限制。刻度的问题是 Windows 不会以非常小的间隔更新值。因此,如果在短时间内多次调用,您最终可能会使用相同的种子。在约 16 毫秒的时间间隔内使用 Random 类是相似的。因此,我不在乎你使用哪一个,但你的反对票是没有根据的。
  • 我没有投反对票,但我可以看到它背后的原因。您的解决方案根本不是随机的,就像您说的那样,如果在紧密循环中调用,可能会生成重复值。如果您使用 Random correctly(通过将其作为类本地变量或静态变量放在方法主体之外),您可以尽可能快地调用它并每次都获得随机值。
  • 没什么私人的,但你的解决方案根本不是随机的。如果它被用于测试工具或一些关键的东西,那么它将无法发挥其作用。 Random() 对象不受此限制,因为它会为快速连续重复的请求产生足够的随机性。
猜你喜欢
  • 2017-04-21
  • 1970-01-01
  • 2018-04-08
  • 2011-03-01
  • 2017-11-06
  • 2019-04-02
  • 1970-01-01
  • 2021-03-02
相关资源
最近更新 更多