Как мне генерировать случайное время между 12:00 и 18:00 в C #? - PullRequest
2 голосов
/ 03 ноября 2019

Я пытаюсь создать случайное время между 12:00 и 18:00. До сих пор я пробовал следующий код:

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

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

Вот способ достижения цели из первой строки вопроса.

Я пытаюсь создать случайное время между 12:00 и 18:00.

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

Тест

for(int i = 0; i < 10; i++)
{
    var rnd = new Random(i);//Fixed seed, just termporarily

    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
1 голос
/ 03 ноября 2019

Вы должны конвертировать 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"));
}
...