Gleiches Ergebnis mit "DateTimeOffset.UtcNow.ToUnixTimeMilliseconds ()"
Ramunas
73
Eine gängige Redewendung in Java ist die Verwendung von currentTimeMillis()für Timing- oder Planungszwecke, bei denen Sie nicht an den tatsächlichen Millisekunden seit 1970 interessiert sind, sondern stattdessen einen relativen Wert berechnen und spätere Aufrufe von vergleichencurrentTimeMillis() mit diesem Wert vergleichen.
Wenn Sie danach suchen, ist das C # -Äquivalent Environment.TickCount.
Aber beide geben Differenzzahlen an. Wie vergleichen sie richtig? C# give : 2688547undJava give : 1390707872687
Elshan
1
@ Elshan Sie können sie nicht vergleichen. Das sind verschiedene Zecken. Diese Technik dient zum Timing und zur Planung innerhalb einer Anwendung, nicht anwendungsübergreifend.
Barend
System.currentTimeMillis()Gibt die UTC-Zeit in ms seit 1970 zurück, während Environment.TickCountms seit dem Start der App zurückgegeben wird. System.currentTimeMillis()ist gut für die Überprüfung der verstrichenen Zeit, aber wenn Sie möchten, dass zwei Dauern vergleichbar sind, müssen Sie verwenden System.nanoTime().
Michelpm
12
Wenn Sie an TIMING interessiert sind, fügen Sie einen Verweis auf System.Diagnostics hinzu und verwenden Sie eine Stoppuhr.
Beispielsweise:
var sw =Stopwatch.StartNew();...var elapsedStage1 = sw.ElapsedMilliseconds;...var elapsedStage2 = sw.ElapsedMilliseconds;...
sw.Stop();
DateTime.Now verwendet die Ortszeit, nicht UTC. Ich weiß nicht genau, was passiert, wenn Sie eine unbekannte Art von DateTime von einer lokalen subtrahieren, aber es ist am besten, beide auf UTC zu setzen :)
Jon Skeet
7
Wir könnten auch ein wenig Lust bekommen und es als Erweiterungsmethode tun, so dass es von der DateTime-Klasse abhängt:
Ist das nicht ein bisschen falsch? Diese Erweiterungsmethode wird an jede Instanz von DateTime weitergegeben, verwendet jedoch nicht die Instanz.
Scheint
1
@mortb Das ist eine Erweiterungsmethode. Auf diese Weise wird in C # definiert, einer Klasse "eine Methode hinzuzufügen", ohne die Klasse zu ändern. Der Compiler interpretiert die Methode und kann sie auf eine Instanz des Parameters "this" anwenden, als wäre es eine Instanzmethode für die Klasse selbst. Es funktioniert genauso wie eine Methode für die statische Klasse, aber der Compiler ermöglicht das Schreiben einer einfacheren, alternativen Syntax.
Suncat2000
1
Das Problem ist, dass der Wert des Parameters dnicht verwendet wird. Um diesen Code zu verwenden, könnten Sie schreiben. var date = new DateTime(); var millis = date.currentTimeMillis();Die dateVariable wäre jedoch nur redundant und ihr Status würde nie verwendet. Wenn Sie den Status des Objekts nicht verwenden, wird beim Erstellen einer Erweiterungsmethode nur der Code verdeckt. Die Antwort von @Hath ist direkter und daher besser (für mich). Vielleicht wollte @Joel Coehoorn den Wert danstelle des DateTime.UtcNowMethodenkörpers verwenden? Ich benutze ziemlich oft Erweiterungsmethoden, aber nicht dafür.
Mortb
Warum sollten Sie eine Erweiterung erstellen, die das Datum nicht verwendet? Ich habe diesen Code verwendet und er hat mich erwischt. Die richtige Version lautet: return (long) ((d.ToUniversalTime () - Jan1st1970) .TotalMilliseconds);
Mark G
4
Hier ist eine einfache Möglichkeit, den Unix-Zeitstempel zu approximieren. Mit UTC näher an das Unix - Konzept, und Sie müssen von verdeckte doublezu long.
Das Framework enthält nicht die alten Sekunden (oder Millisekunden) seit 1970. Der nächste Wert ist DateTime.Ticks. Dies ist die Anzahl von 100 Nanosekunden seit dem 1. Januar 0001.
Wenn Sie möchten, dass ein Zeitstempel zwischen verschiedenen Prozessen, verschiedenen Sprachen (Java, C, C #) unter GNU / Linux und Windows (mindestens sieben) verglichen wird:
Ich weiß, dass die Frage nach einem Äquivalent fragt, aber da ich diese 2 für die gleichen Aufgaben verwende, die ich in GetTickCount ausführe . Ich mag nostalgisch sein, aber System.currentTimeMillis () und GetTickCount () sind die einzigen, die ich zum Abrufen von Zecken verwende.
Antworten:
Eine Alternative:
quelle
Eine gängige Redewendung in Java ist die Verwendung von
currentTimeMillis()
für Timing- oder Planungszwecke, bei denen Sie nicht an den tatsächlichen Millisekunden seit 1970 interessiert sind, sondern stattdessen einen relativen Wert berechnen und spätere Aufrufe von vergleichencurrentTimeMillis()
mit diesem Wert vergleichen.Wenn Sie danach suchen, ist das C # -Äquivalent
Environment.TickCount
.quelle
C# give : 2688547
undJava give : 1390707872687
System.currentTimeMillis()
Gibt die UTC-Zeit in ms seit 1970 zurück, währendEnvironment.TickCount
ms seit dem Start der App zurückgegeben wird.System.currentTimeMillis()
ist gut für die Überprüfung der verstrichenen Zeit, aber wenn Sie möchten, dass zwei Dauern vergleichbar sind, müssen Sie verwendenSystem.nanoTime()
.Wenn Sie an TIMING interessiert sind, fügen Sie einen Verweis auf System.Diagnostics hinzu und verwenden Sie eine Stoppuhr.
Beispielsweise:
quelle
quelle
DateTimeOffset
Methode wurde ab .Net 4.6 eingeführt.das
System.currentTimeMillis()
in Java gibt die aktuelle Zeit in Millisekunden vom 1.1.1970c # das wäre
edit: machte es utc wie vorgeschlagen :)
quelle
Wir könnten auch ein wenig Lust bekommen und es als Erweiterungsmethode tun, so dass es von der DateTime-Klasse abhängt:
quelle
d
nicht verwendet wird. Um diesen Code zu verwenden, könnten Sie schreiben.var date = new DateTime(); var millis = date.currentTimeMillis();
Diedate
Variable wäre jedoch nur redundant und ihr Status würde nie verwendet. Wenn Sie den Status des Objekts nicht verwenden, wird beim Erstellen einer Erweiterungsmethode nur der Code verdeckt. Die Antwort von @Hath ist direkter und daher besser (für mich). Vielleicht wollte @Joel Coehoorn den Wertd
anstelle desDateTime.UtcNow
Methodenkörpers verwenden? Ich benutze ziemlich oft Erweiterungsmethoden, aber nicht dafür.Hier ist eine einfache Möglichkeit, den Unix-Zeitstempel zu approximieren. Mit UTC näher an das Unix - Konzept, und Sie müssen von verdeckte
double
zulong
.Drucke:
quelle
Das Framework enthält nicht die alten Sekunden (oder Millisekunden) seit 1970. Der nächste Wert ist DateTime.Ticks. Dies ist die Anzahl von 100 Nanosekunden seit dem 1. Januar 0001.
quelle
Ich betrachte nur den einfachsten Weg, um das zu erreichen, was Sie angestrebt haben:
quelle
DateTime.UtcNow
ist eine bessere OptionWenn Sie möchten, dass ein Zeitstempel zwischen verschiedenen Prozessen, verschiedenen Sprachen (Java, C, C #) unter GNU / Linux und Windows (mindestens sieben) verglichen wird:
C #:
Java:
C GNU / Linux:
C Windows:
quelle
Ich weiß, dass die Frage nach einem Äquivalent fragt, aber da ich diese 2 für die gleichen Aufgaben verwende, die ich in GetTickCount ausführe . Ich mag nostalgisch sein, aber System.currentTimeMillis () und GetTickCount () sind die einzigen, die ich zum Abrufen von Zecken verwende.
quelle