2016-06-02 4 views
0

Ich portiere Code von Java nach .NET und suche nach einem Noda-Zeitäquivalent der getMillisOfDay() joda-time-Methode des LocalTime-Objekts.Äquivalent von joda LocalTime getMillisOfDay() in noda

Gibt es eine Entsprechung oder muss ich meine eigene codieren?

+0

Nicht vertraut mit Noda-Zeit, ist MillisOfDay die Anzahl der Millisekunden seit Mitternacht einer bestimmten DateTime? –

+0

Ja, genau das. – Jon

+0

... Warum verwenden Sie 'LocalTime'? Die Notwendigkeit für diesen Typ ist normalerweise ziemlich selten, verglichen mit absoluten Stempeln ('Instant' oder' DateTime'). Zumal Mitternacht bei einigen DST-Schaltern nicht existiert. –

Antwort

3

In Noda Zeit 1.x, verwenden Sie die LocalTime.TickOfDay Eigenschaft, und dann ist es nur zu teilen, indem er NodaConstants.TicksPerMillisecond Millisekunden zu erhalten:

LocalTime localTime = ...; 
long millis = localTime.TickOfDay/NodaConstants.TicksPerMillisecond; 
+0

Danke - funktioniert gut, obwohl für die ursprüngliche Frage ich denke, es ist TicksPerMillisecond. – Jon

+0

@Jon: Whoops, Ja - falsch gelesen, wird behoben. –

0

Closest Sie auf die Anzahl von Millisekunden seit Mitternacht mit Out-of-the-box-Net-Funktionalität erhalten können:

dateTime.TimeOfDay.TotalMilliseconds 

z.B.

double millisOfDay = DateTime.Now.TimeOfDay.TotalMilliseconds; 

TimeOfDay kehrt die TimeSpan seit Mitternacht (Tageszeit) und TotalMilliseconds kehrt (der Name es weg gegeben haben könnte), um die Gesamtzahl von Millisekunden dieser TimeSpan.

Es ist ein double übrigens, so dass Sie auch Bruchteile von Millisekunden erhalten. Wenn Sie dies eine Menge benötigen, kann eine Verlängerung Methode hilfreich sein:

public static class DateTimeExtension 
{ 
    // should of course be in pascal case ;) 
    public static int getMillisOfDay(this DateTime dateTime) 
    { 
     return (int) dateTime.TimeOfDay.TotalMilliseconds; 
    } 
} 

int millisOfDay = DateTime.Now.getMillisOfDay(); 
+0

Beachten Sie, dass dies nur funktioniert, wenn Sie entweder UTC verwenden oder die Zeitzone _ (entweder mit "DateTimeKind.Unspecified" oder nur mit "localTimeKind.Unspecified" behandeln und so tun, als ob die Zeitzone nicht existiert), da dies sonst der Fall ist (potentiell) zweimal den falschen Wert zurückgeben: 'DateTime' ist wider Erwarten für alle Methoden und Ergebnisse (außer' ToUniveralTime() '/' ToLocalTime() ') DST/Zeitzone ignorant. Die' TimeSpan' wird eine Stunde kurz/lang an DST Tagen (vorausgesetzt, Sie sind in einer Stunde - andere DST-Zone, und nicht etwas anderes). –