Je cherche un code C# succinct et moderne pour générer une date aléatoire entre le 1er janvier 1995 et la date actuelle.
Je pense qu'une solution qui utilise Enumerable.Range d'une manière ou d'une autre pourrait rendre cela plus succinct.
Je cherche un code C# succinct et moderne pour générer une date aléatoire entre le 1er janvier 1995 et la date actuelle.
Je pense qu'une solution qui utilise Enumerable.Range d'une manière ou d'une autre pourrait rendre cela plus succinct.
Random rnd = new Random();
DateTime datetoday = DateTime.Now;
int rndYear = rnd.Next(1995, datetoday.Year);
int rndMonth = rnd.Next(1, 12);
int rndDay = rnd.Next(1, 31);
DateTime generateDate = new DateTime(rndYear, rndMonth, rndDay);
Console.WriteLine(generateDate);
//Cette méthode n'est peut-être pas la meilleure, mais elle est rapide et facile à comprendre.
Je suis un peu en retard dans le jeu, mais voici une solution qui fonctionne bien :
void Main()
{
var dateResult = GetRandomDates(new DateTime(1995, 1, 1), DateTime.UtcNow, 100);
foreach (var r in dateResult)
Console.WriteLine(r);
}
public static IList<DateTime> GetRandomDates(DateTime startDate, DateTime maxDate, int range)
{
var randomResult = GetRandomNumbers(range).ToArray();
var calculationValue = maxDate.Subtract(startDate).TotalMinutes / int.MaxValue;
var dateResults = randomResult.Select(s => startDate.AddMinutes(s * calculationValue)).ToList();
return dateResults;
}
public static IEnumerable<int> GetRandomNumbers(int size)
{
var data = new byte[4];
using (var rng = new System.Security.Cryptography.RNGCryptoServiceProvider(data))
{
for (int i = 0; i < size; i++)
{
rng.GetBytes(data);
var value = BitConverter.ToInt32(data, 0);
yield return value < 0 ? value * -1 : value;
}
}
}
Petite méthode qui renvoie une date aléatoire sous forme de chaîne, en fonction de quelques paramètres d'entrée simples. Construit à partir de variations des réponses ci-dessus :
public string RandomDate(int startYear = 1960, string outputDateFormat = "yyyy-MM-dd")
{
DateTime start = new DateTime(startYear, 1, 1);
Random gen = new Random(Guid.NewGuid().GetHashCode());
int range = (DateTime.Today - start).Days;
return start.AddDays(gen.Next(range)).ToString(outputDateFormat);
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Réponse en DateTime aléatoire entre deux plages - sortie non unifiée a une méthode d'aide avec les paramètres de date "From/To".