【问题标题】:How do I generate a random time between 12AM and 6PM in C#?如何在 C# 中生成 12AM 和 6PM 之间的随机时间?
【发布时间】:2019-11-03 04:30:35
【问题描述】:

我正在尝试在上午 12 点到下午 6 点之间生成一个随机时间。到目前为止,我尝试了以下代码:

Random random = new Random();

TimeSpan startWorkDay = new TimeSpan(5, 0, 0);
TimeSpan endWorkDay = new TimeSpan(12, 0, 0);

TimeSpan numberOfMinutes = endWorkDay - startWorkDay;
TimeSpan timeSpan = new TimeSpan(0, random.Next(0, (int)numberOfMinutes.TotalMinutes), 0);

DateTime flightTimeSpan = startWorkDay + timeSpan;

for (int i = 0; i < 10; i++)
{
    Console.WriteLine(flightTimeSpan.ToString("hh:mm tt"));
}

我做错了什么?

编辑:上面提供的代码是说我cannot implicitly convert System.TimeSpan to System.DateTime

【问题讨论】:

  • 这会产生什么输出和/或错误?你期望输出是什么?
  • 我正在尝试以 hh:mm tt 格式获取时间,我提供的代码争辩说,我无法将 TimeSpan 转换为 DateTime
  • DateTime flightTimeSpan = startWorkDay + timeSpan; TimeSpan 对象,这会导致另一个 TimeSpan,但您试图将其分配给一个无效的 DateTime 对象.
  • 我怎样才能将其转换为 DateTime?

标签: c# datetime random difference timespan


【解决方案1】:

这是从问题的第一行实现目标的一种方法。

我正在尝试在上午 12 点到下午 6 点之间生成一个随机时间。

var rnd = new Random(i);//Fixed seed, just termporarily
var minutes = rnd.Next(0, 18 * 60);
var timeOfDay = TimeSpan.FromMinutes(minutes);

测试

var rnd = new Random(i);//Fixed seed, just as an example
for(int i = 0; i < 10; i++)
{
    var minutes = rnd.Next(0, 18 * 60);

    var timeOfDay = TimeSpan.FromMinutes(minutes);

    var dt = new DateTime(2019, 11, 03) + timeOfDay;

    Console.WriteLine(dt.ToString("hh:mm tt"));
}
// .NETCoreApp,Version=v3.0
01:04 PM
04:28 AM
01:52 PM
05:17 AM
02:41 PM
06:05 AM
03:29 PM
06:53 AM
04:18 PM
07:42 AM

【讨论】:

  • 最好在循环外创建Random 实例,并使用无参数构造函数(它使用与时间相关的种子)。
【解决方案2】:

您必须先将TimeSpan 转换为DateTime,然后才能使用ToString("hh:mm tt")

TimeSpan flightTimeSpan = startWorkDay + timeSpan;
DateTime flightDateTime = new DateTime(flightTimeSpan.Ticks);

for (int i = 0; i < 10; i++)
{
    Console.WriteLine(flightDateTime.ToString("hh:mm tt"));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-15
    • 2014-04-02
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多