2015-12-02 17 views
5

Ich versuche bekommen (jjjj-mm-tt hh: mm: ss) geändert werdenWie beide Zufalls Datum und Uhrzeit C#

I verwendet dieser Code aber nur das Datum ändern und die Zeit

DateTime RandomDay() 
     { 
      DateTime start = new DateTime(2013, 1, 1 , 1 , 1 ,1); 
      Random gen = new Random(); 

      int range = (DateTime.Today - start).Days; 
      return start.AddDays(gen.Next(range)); 
     } 

ich sagte ok beheben, wenn ich einen Code schreiben, das einen zufälligen Zeitpunkt erzeugen und speichern sie in einer variable1, dann einen anderen Code schreiben, zufällige Zeit erzeugen, und Speichern Sie es in Variable2, wählen Sie dann das Datum nur aus Variable1 und wählen Sie die Zeit nur aus Variable2, dann kombinieren Sie Variable1 und Variable2 zusammen, so dass ich zufällig Datum und Uhrzeit generieren kann Deshalb schrieb ich diese andere Methode, die Zeit

DateTime RandomTime() 
     { 
      DateTime start = new DateTime(2013, 1, 1, 1, 1, 1); 
      Random gen = new Random(); 

      int range = (DateTime.Today - start).Hours; 
      return start.AddHours(gen.Next(range)); 
     } 

jetzt das Problem in dem RandomTime Verfahren zu erzeugen, ist es nur Zufall Stunden erzeugt, nicht die Werte der Minuten und Sekunden ändern,

ist es Irgendwelche Vorschläge, um das Codeproblem zu lösen? Gibt es trotzdem Zufallswerte für alle (JJJJ-MM-TT hh: mm: ss)?

+6

nur eine zufällige Anzahl von Sekunden innerhalb der gesetzlichen Grenzen des Datetime hinzufügen – stuartd

+2

Sie sind nicht diese in Unit-Tests verwenden, richtig ..? – stuartd

+1

verwenden Sie einfach Zufallszahlen für alle Konstruktor Parameter – eschneider

Antwort

6

Hier ist eine Methode, die nach dem Zufallsprinzip jeden Teil des Datums und der Uhrzeit generiert.

Es nutzt entsprechende Grenzen, so dass die erzeugte Datum gültig ist (Jahre innerhalb 1-9999, Monate innerhalb von 1-12, um einen Anruf zuDateTime.DaysInMonth, so dass wir mit 31. Februar am Ende nicht, etc).

public IEnumerable<DateTime> GenerateRandomDates(int numberOfDates) 
{ 
    var rnd = new Random(Guid.NewGuid().GetHashCode()); 

    for (int i = 0; i < numberOfDates; i++) 
    { 
     var year = rnd.Next(1, 10000); 
     var month = rnd.Next(1, 13); 
     var days = rnd.Next(1, DateTime.DaysInMonth(year, month) + 1); 

     yield return new DateTime(year, month, days, 
      rnd.Next(0, 24), rnd.Next(0, 60), rnd.Next(0, 60), rnd.Next(0, 1000)); 
    } 
} 

bis 10.000 von ihnen zu erzeugen:

var randomDateTimes = GenerateRandomDates(10000); 
+0

Das gibt mir seltsamen Wert "WebApplication1.AddToParkingDb + d__0" – amal50

+0

@ amal50 Wie verwenden Sie es? –

+0

geschützter void Button1_Click (Objektabsender, EventArgs e) { var randomDateTimes = GenerateRandomDates (10000); Response.Write (randomDateTimes);} – amal50

2

Hier ist die eine Zeile Lösung. 1 Zeile für den Rückteil;)

private static Random _ran = new Random(); 

public static DateTime RandomDateTime() 
{ 
    return 
     DateTime.MinValue.Add(
      TimeSpan.FromTicks((long) (_ran.NextDouble()*DateTime.MaxValue.Ticks))); 
} 

Anmerkung 1: _ran.NextDouble() gibt Zufallswert zwischen 0 und 1, so dass die Menge von Zecken Sie auf ein Minimum Datumzeit hinzufügen würde zwischen 0 und DateTime.MaxValue.Ticks. Die zufällige Datumzeit würde also zwischen minimaler und maximaler Datumszeit liegen.

Hinweis 2: DateTime.Min.Ticks ist gleich 0. Dieser Prozess wird also niemals überlaufen, auch wenn Sie maximale Zeit-Ticks hinzufügen.


Hier ist, wie 10k zufällige Datum Zeiten zu generieren.

DateTime[] datetimes = new DateTime[10000]; 

for (int i = 0; i < datetimes.Length; i++) 
{ 
    datetimes[i] = RandomDateTime(); 
} 

Sie können auch diese Methode verwenden, wenn Sie Bereiche definieren möchten.

public static DateTime RandomDateTime(DateTime min, DateTime max) 
{ 
    return 
     DateTime.MinValue.Add(
      TimeSpan.FromTicks(min.Ticks + (long) (_ran.NextDouble()*(max.Ticks - min.Ticks)))); 
}