Gehen - Zeit - Millisekunden
Ich muss die Zeit in Millisekunden, für das, was könnte eine große Menge von Transaktionen, so möchte ich etwas, das ist korrekt und schnell. Werden die folgenden arbeiten und den job am besten? :
iMilli := int((time.Nanoseconds() % 1e6) / 1e3)
TIA
"Zeit in Millisekunden" bedeutet normalerweise "die Zeit, die seit einer bestimmten Epoche in Millisekunden" - code wird Ihnen nur die Bruchteil einer Sekunde in millis (also 0-999). Ist das wirklich das, was Sie sind, nach?
Einfach mit der Zeit.Nanosekunden() / 1e6 sollte genug sein. Passt es nicht in einer 32-bit-int aber.
Ich bin nach der Zahl der Millisekunden der aktuellen Sekunde, die konvertieren die 3 Ziffern in einem string. Zeit.LocalTime() gibt mir den rest das Datum und die Uhrzeit.
Einfach mit der Zeit.Nanosekunden() / 1e6 sollte genug sein. Passt es nicht in einer 32-bit-int aber.
Ich bin nach der Zahl der Millisekunden der aktuellen Sekunde, die konvertieren die 3 Ziffern in einem string. Zeit.LocalTime() gibt mir den rest das Datum und die Uhrzeit.
InformationsquelleAutor brianoh | 2011-05-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
BEARBEITEN: Seit dieser Antwort wurde zuerst geschrieben, escape-Analyse wurde code Hinzugefügt, um die Go-Compiler. Dies ermöglicht dem compiler die unnötigen Zuweisungen in bestimmten Situationen, einschließlich (vermutlich) die unten beschriebenen. Mit der neuesten Wochenzeitschriften, daher, es kann genauso gut ein einfacher Aufruf von Zeit.Nanosekunden(). Bitte tun Sie Ihre eigenen Profilerstellung.
Meisten der Zeit, die Funktionen verursachen einen heap-Allokation (die dann anschließend abgeholt werden muss, verursacht eine pause in der Anwendung). Also, wenn Sie schauen, bis die Zeit Häufig, es klingt wie Sie sind, müssen Sie verwenden syscall.Gettimeofday() direkt (es ist die Funktion, dass die weitere Zeit-Funktionen am Ende aufrufen sowieso). Siehe die Diskussion hier für weitere Informationen:
http://groups.google.com/group/golang-nuts/browse_thread/thread/f2209022f43efcca?pli=1
Die Lösung, die ich verwende, ist vorab reservieren
tv syscall.Timeval
, und jedes mal durch meine innere Schleife ich dies tun:Dann kann man die Millisekunden mit:
Ich habe festgestellt, dass dies viel bessere Leistung, als der Aufruf der Zeit.Nanosekunden() oder eine der anderen höheren-level-Zeit-Funktionen.
FWIW, ich bekomme die aktuelle Zeit, die über alle 30 Mikrosekunden, und es scheint gut zu funktionieren.
InformationsquelleAutor laslowh
Gibt es 1e9 Nanosekunden in einer Sekunde, und 1e6 Nanosekunden in einer Millisekunde, so würde man etwas wie das hier tun:
Sorry, ich meinte mehr hinzufügen. Vielen Dank für diese info. Das scheint zu lösen die aktuelle Millisekunde problem für mich. Für den UNIX-timestamp YYYYMMDDhhmmss ich war mit : sTimestamp := Zeit.LocalTime().Format("20060102150405"); Ist es nicht möglich, dass (mal.LocalTime().Format) und erhalten auch die nano-oder Millisekunden-Wert, der relevant ist? Dh. Zimmerreserviereung, ohne das Sie zu extrahieren .Jahr .Monat, etc.
Na ja, offensichtlich können Sie das nicht ein Aufruf an die Zeit.Nanosekunden() und das Stück zusammen mit einem Aufruf an die Zeit.LocalTime(), aber mit dem obigen code, sollten Sie in der Lage sein zu tun, z.B.
localTime.Format("20060102150405") + fmt.Sprintf(".%03d",miliSeconds);
Von dem, was ich versucht haben, und was Sie gesagt haben, Ihre ursprüngliche Antwort zu sein scheint der einzige Weg, es zu tun. So werde ich es auch benutzen. Die Zeit.LocalTime().Format() ist eine schöne, saubere Weg, um den timestamp, aber soweit ich sagen kann, es kann nicht verwendet werden, die mit Millisekunden, denn die sind nicht an der gleichen Millisekunde und die zweite konnte den rollover.
InformationsquelleAutor Lyke
Können Sie nur verwenden Sie folgenden code, um die aktuelle Zeit in Millisekunden an, die nach 1 Jun 1970
time.Now().UnixNano() % 1e6 / 1e3
.Ich aktualisiert meine Antwort. Danke
InformationsquelleAutor olyanren