J'ai une fonction pour générer des DateTime aléatoires entre deux dates ... et en quelque sorte, elle fait des dates aléatoires avant la date minimale. Qu'est ce qui ne va pas avec mon code?Pourquoi mon générateur DateTime aléatoire fait-il des dates en dehors de la plage?
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) N'oubliez pas de vérifier si (dt1> dt2) '? 2) 'DateTime random_dt = nouveau DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) .AddSeconds (random_sec) .AddSeconds (dt1_sec);' – KamikyIT
Que se passe-t-il dans votre 'BuyersManager.RNG.Next' ? – krillgar
@krillgar - désolé, j'ai oublié de signaler que c'est juste une instance aléatoire normale. – Kosmos