Zu Ihrer Information, die störenden alten Datum Zeitklassen wie java.util.Date, java.util.Calendarund Timestampsind jetzt Erbe, durch die verdrängte java.time Klassen. Die meisten Funktionen von java.time werden im ThreeTen-Backport- Projekt auf Java 6 und Java 7 zurückportiert . Weiter angepasst für frühere Android im ThreeTenABP- Projekt. Siehe Verwendung von ThreeTenABP… .
Basil Bourque
Antworten:
298
Die Lösung ist :
Long tsLong =System.currentTimeMillis()/1000;String ts = tsLong.toString();
Dies berücksichtigt nicht den Zeitzonenversatz des Geräts.
kjdion84
1
@ kjdion84 Entschuldigung, aber warum denkst du, wäre es wichtig? Nur basierend auf der Frage.
Cԃ ա ԃ
82
Aus dem Entwicklerblog:
System.currentTimeMillis()ist die Standard-Wanduhr (Uhrzeit und Datum), die Millisekunden seit der Epoche ausdrückt. Die Wanduhr kann vom Benutzer oder vom Telefonnetz eingestellt werden (siehe setCurrentTimeMillis (lang) ), sodass die Zeit möglicherweise unvorhersehbar vor- oder zurückspringt. Diese Uhr sollte nur verwendet werden, wenn die Korrespondenz mit realen Daten und Zeiten wichtig ist, z. B. in einem Kalender oder einer Weckeranwendung. Intervall- oder abgelaufene Zeitmessungen sollten eine andere Uhr verwenden. Wenn Sie verwenden System.currentTimeMillis(), sollten Sie auf das Hören ACTION_TIME_TICK, ACTION_TIME_CHANGEDund ACTION_TIMEZONE_CHANGEDIntent - Übertragungen , um herauszufinden , wenn die Zeit ändert.
Unter developer.android.com/reference/java/lang/… habe ich festgestellt, dass dies System.nanoTime()eine Alternative zu System.currentTimeMillis()unvorhersehbaren Schwankungen darstellt und zur Messung von Dauerunterschieden ausgelegt ist.
Bianca Daniciuc
2
@ ana01 "Der Nullwert ist normalerweise immer dann, wenn das Gerät zuletzt gestartet wurde". Daher kann er nur verwendet werden, wenn Sie die Dauerunterschiede auf demselben Gerät vergleichen. Zum Beispiel nicht nützlich für die Datenbankspeicherung.
Michał K
1
Nur eine Anmerkung zu @ ana01s Kommentar, System.nanoTime()die nicht zur Anzeige der Wanduhrzeit geeignet ist. Verwenden Sie zu diesem Zweck System.currentTimeMillis()stattdessen.
Akash Agarwal
33
1320917972 ist ein Unix-Zeitstempel, der die Anzahl der Sekunden seit 00:00:00 UTC am 1. Januar 1970 verwendet. Sie können die TimeUnitKlasse für die Einheitenumrechnung verwenden - von System.currentTimeMillis()in Sekunden.
Hier ist ein für Menschen lesbarer Zeitstempel, der in einem Dateinamen verwendet werden kann, für den Fall, dass jemand dasselbe benötigt, das ich benötigt habe:
package com.example.xyz;import android.text.format.Time;/**
* Clock utility.
*/publicclassClock{/**
* Get current time in human-readable form.
* @return current time as a string.
*/publicstaticString getNow(){Time now =newTime();
now.setToNow();String sTime = now.format("%Y_%m_%d %T");return sTime;}/**
* Get current time in human-readable form without spaces and special characters.
* The returned value may be used to compose a file name.
* @return current time as a string.
*/publicstaticString getTimeStamp(){Time now =newTime();
now.setToNow();String sTime = now.format("%Y_%m_%d_%H_%M_%S");return sTime;}}
Hey, kannst du auch sagen, wie man eine Liste von Zeitstempeln am besten sortiert? Ich dachte daran, sie selbst zu sortieren, dachte aber, es könnte einen besseren Weg geben.
Abbas
Für zukünftige Referenz für alle, die dies lesen, beachten Sie, dass "android.text.format.Time" jetzt veraltet ist
Während die Division durch 1000 für viele nicht überraschend ist, kann es schwierig sein, eigene Zeitkonvertierungen durchzuführen, und es ist daher eine schlechte Angewohnheit, sich darauf einzulassen, wenn Sie dies vermeiden können.
Die InstantKlasse, die ich verwende, ist Teil von java.time, der modernen Java-API für Datum und Uhrzeit. Es ist in neue Android-Versionen ab API-Level 26 integriert. Wenn Sie für älteres Android programmieren, erhalten Sie möglicherweise den Backport (siehe unten). Wenn Sie das verständlicherweise nicht möchten, würde ich immer noch eine integrierte Konvertierung verwenden:
Dies ist die gleiche Antwort wie von Sealskej. Die Ausgabe ist dieselbe wie zuvor.
Frage: Kann ich java.time unter Android verwenden?
Ja, java.time funktioniert gut auf älteren und neueren Android-Geräten. Es erfordert nur mindestens Java 6 .
In Java 8 und höher und auf neueren Android-Geräten (ab API-Level 26) ist die moderne API integriert.
In Nicht-Android Java 6 und 7 erhalten Sie den ThreeTen Backport, den Backport der neuen Klassen (ThreeTen für JSR 310; siehe die Links unten).
Verwenden Sie auf (älteren) Android die Android-Edition von ThreeTen Backport. Es heißt ThreeTenABP. Und stellen Sie sicher, dass Sie die Datums- und org.threeten.bpZeitklassen mit Unterpaketen importieren.
Fast perfekte Antwort (ich habe gestimmt), aber zumindest meiner ehrlichen Meinung nach sollten Sie die ThreeTen Backport-Referenz entfernen, da dies eine Frage zu Android und nicht zu Java im Allgemeinen ist. Und es kann für Anfänger bei Android verwirrend werden.
Slobodan Antonijević
1
@ SlobodanAntonijević Für Android-Programmierer ist es wichtig zu verstehen, dass (a) wenn sie Android 26 und höher unterstützen, eine Implementierung von java.time integriert ist, (b) wenn sie frühes Android vor 26 unterstützen, sie eine Bibliothek hinzufügen müssen , die ThreeTenABP- Bibliothek und (c) bei Verwendung von ThreeTenABP wissen, dass diese Bibliothek tatsächlich eine Anpassung von ThreeTen-Backport ist, die von Java an Android angepasst wurde. Die ThreeTenABP- Bibliothek ist nur ein Android-spezifischer Wrapper um die ThreeTen-Backport- Bibliothek. In dieser Tabellengrafik werden die 3 Bibliotheken verglichen.
Basil Bourque
@BasilBourque Sie sind völlig richtig. Sie können ThreeTen-Backport zwar importieren und in einer Android-App verwenden, dies hat jedoch aufgrund der JAR-Abhängigkeit einen extrem großen Einfluss auf die Leistung. Aus diesem Grund habe ich gesagt, dass der Beitrag spezifischer sein sollte, dass Android-Entwickler niemals ThreeTen-Backport verwenden sollten, sondern stattdessen ThreeTenABP für die Unterstützung von API 25 und darunter. Ich habe zahlreiche Entwickler auf verschiedenen Boards gesehen, die sich nicht sicher sind, welches für Android verwendet werden soll, weil sie namentlich ähnlich klingen.
Slobodan Antonijević
Guter Punkt, @ SlobodanAntonijević. Ich habe versucht, es nur ein wenig klarer zu machen.
Ole VV
1
@ SlobodanAntonijević Diese Tabelle zeigt, wo Sie java.time für Java und Android erhalten können.
Basil Bourque
3
Lösung in Kotlin:
val nowInEpoch =Instant.now().epochSecond
Stellen Sie sicher, dass Ihre SDK-Mindestversion 26 ist.
Dieser Code ist eine Kotlin-Version. Ich habe eine andere Idee, eine zufällige Shuffle-Ganzzahl in die letzte Ziffer einzufügen, um die Varianz-Epochenzeit anzugeben.
Kotlin-Version
val randomVariance =(0..100).shuffled().first()
val currentEpoch =(System.currentTimeMilis()/1000)+ randomVariance
val deltaEpoch = oldEpoch - currentEpoch
Ich denke, es wird besser sein, diesen Kode zu verwenden, als von Android Version 26 oder mehr abhängig zu sein
java.util.Date
,java.util.Calendar
undTimestamp
sind jetzt Erbe, durch die verdrängte java.time Klassen. Die meisten Funktionen von java.time werden im ThreeTen-Backport- Projekt auf Java 6 und Java 7 zurückportiert . Weiter angepasst für frühere Android im ThreeTenABP- Projekt. Siehe Verwendung von ThreeTenABP… .Antworten:
Die Lösung ist :
quelle
Aus dem Entwicklerblog:
System.currentTimeMillis()
ist die Standard-Wanduhr (Uhrzeit und Datum), die Millisekunden seit der Epoche ausdrückt. Die Wanduhr kann vom Benutzer oder vom Telefonnetz eingestellt werden (siehe setCurrentTimeMillis (lang) ), sodass die Zeit möglicherweise unvorhersehbar vor- oder zurückspringt. Diese Uhr sollte nur verwendet werden, wenn die Korrespondenz mit realen Daten und Zeiten wichtig ist, z. B. in einem Kalender oder einer Weckeranwendung. Intervall- oder abgelaufene Zeitmessungen sollten eine andere Uhr verwenden. Wenn Sie verwendenSystem.currentTimeMillis()
, sollten Sie auf das HörenACTION_TIME_TICK
,ACTION_TIME_CHANGED
undACTION_TIMEZONE_CHANGED
Intent - Übertragungen , um herauszufinden , wenn die Zeit ändert.quelle
System.nanoTime()
eine Alternative zuSystem.currentTimeMillis()
unvorhersehbaren Schwankungen darstellt und zur Messung von Dauerunterschieden ausgelegt ist.System.nanoTime()
die nicht zur Anzeige der Wanduhrzeit geeignet ist. Verwenden Sie zu diesem ZweckSystem.currentTimeMillis()
stattdessen.1320917972 ist ein Unix-Zeitstempel, der die Anzahl der Sekunden seit 00:00:00 UTC am 1. Januar 1970 verwendet. Sie können die
TimeUnit
Klasse für die Einheitenumrechnung verwenden - vonSystem.currentTimeMillis()
in Sekunden.quelle
Sie können die SimpleDateFormat- Klasse verwenden:
quelle
Verwenden Sie die folgende Methode, um den aktuellen Zeitstempel abzurufen. Es funktioniert gut für mich.
quelle
Es ist einfach zu bedienen:
Wenn Sie es in einem bestimmten Format möchten, benötigen Sie den folgenden Formatierer
quelle
Hier ist ein für Menschen lesbarer Zeitstempel, der in einem Dateinamen verwendet werden kann, für den Fall, dass jemand dasselbe benötigt, das ich benötigt habe:
quelle
Probiere diese
und Zeitstempel zum Zeitformat
quelle
java.time
Ich möchte die moderne Antwort beitragen.
Ausgabe beim Ausführen gerade jetzt:
Während die Division durch 1000 für viele nicht überraschend ist, kann es schwierig sein, eigene Zeitkonvertierungen durchzuführen, und es ist daher eine schlechte Angewohnheit, sich darauf einzulassen, wenn Sie dies vermeiden können.
Die
Instant
Klasse, die ich verwende, ist Teil von java.time, der modernen Java-API für Datum und Uhrzeit. Es ist in neue Android-Versionen ab API-Level 26 integriert. Wenn Sie für älteres Android programmieren, erhalten Sie möglicherweise den Backport (siehe unten). Wenn Sie das verständlicherweise nicht möchten, würde ich immer noch eine integrierte Konvertierung verwenden:Dies ist die gleiche Antwort wie von Sealskej. Die Ausgabe ist dieselbe wie zuvor.
Frage: Kann ich java.time unter Android verwenden?
Ja, java.time funktioniert gut auf älteren und neueren Android-Geräten. Es erfordert nur mindestens Java 6 .
org.threeten.bp
Zeitklassen mit Unterpaketen importieren.Links
java.time
.java.time
zuerst beschrieben wurde.java.time
Java 6 und 7 (ThreeTen für JSR-310).quelle
Lösung in Kotlin:
Stellen Sie sicher, dass Ihre SDK-Mindestversion 26 ist.
quelle
Ich schlage vor, die Antwort von Hits zu verwenden, aber ein Gebietsschema-Format hinzuzufügen, so empfehlen Android-Entwickler :
quelle
Dieser Code ist eine Kotlin-Version. Ich habe eine andere Idee, eine zufällige Shuffle-Ganzzahl in die letzte Ziffer einzufügen, um die Varianz-Epochenzeit anzugeben.
Kotlin-Version
Ich denke, es wird besser sein, diesen Kode zu verwenden, als von Android Version 26 oder mehr abhängig zu sein
quelle