我有一個函數可以在兩個日期之間的範圍內生成隨機日期時間...並以某種方式使隨機日期在最小日期之前。我的代碼有什麼問題?爲什麼我的隨機DateTime生成器使日期超出範圍?
public void TestFunct()
{
GenerateRandomTimeBetweenDates(new Random(), DateTime.ParseExact("01.01.2017 00:00:00", "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture), DateTime.ParseExact("01.02.2017 00:00:00", "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture));
}
public DateTime GenerateRandomTimeBetweenDates(Random RNG, DateTime dt1, DateTime dt2)
{
int dt1_sec = (int)dt1.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds; //calc seconds since Unix epoch
int dt2_sec = (int)dt2.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
int random_sec = RNG.Next(Math.Min(dt1_sec, dt2_sec), Math.Max(dt1_sec, dt2_sec)); //RNG is Random instance. Here I generate seconds amount between two amounts - minimal and maximal.
DateTime random_dt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(random_sec); //I try to recreate date by adding generated seconds amount to Unix epoch.
if (random_dt.Year == 2016)
random_dt = random_dt; //this I use to trigger breakpoint
return random_dt;
}
1)不要忘記檢查'if(dt1> dt2)'? 2)'DateTime random_dt = new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc).AddSeconds(random_sec).AddSeconds(dt1_sec);' – KamikyIT
'BuyersManager.RNG.Next'中會發生什麼? ? – krillgar
@krillgar - 抱歉,忘記指出這只是正常的隨機實例。 – Kosmos