Ich habe eine Zeichenfolge mit einem Datumsformat wie
Jun 13 2003 23:11:52.454 UTC
enthält millisec ... was ich in epoch umwandeln möchte. Gibt es in Java ein Dienstprogramm, das ich für diese Konvertierung verwenden kann?
Dieser Code zeigt, wie ein Java.text.SimpleDateFormat verwendet wird, um ein Java.util.Date aus einem String zu analysieren:
String str = "Jun 13 2003 23:11:52.454 UTC";
SimpleDateFormat df = new SimpleDateFormat("MMM dd yyyy HH:mm:ss.SSS zzz");
Date date = df.parse(str);
long Epoch = date.getTime();
System.out.println(Epoch); // 1055545912454
Date.getTime()
gibt die Epoche in Millisekunden zurück.
Sie können auch die neue Java 8-API verwenden
import Java.time.ZonedDateTime;
import Java.time.format.DateTimeFormatter;
public class StackoverflowTest{
public static void main(String args[]){
String strDate = "Jun 13 2003 23:11:52.454 UTC";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM dd yyyy HH:mm:ss.SSS zzz");
ZonedDateTime zdt = ZonedDateTime.parse(strDate,dtf);
System.out.println(zdt.toInstant().toEpochMilli()); // 1055545912454
}
}
Die DateTimeFormatter
Klasse ersetzt die alte SimpleDateFormat
. Sie können dann eine ZonedDateTime
erstellen, aus der Sie die gewünschte Epochenzeit extrahieren können.
Der Hauptvorteil ist, dass Sie jetzt Thread-sicher sind.
Danke an Basil Bourque für seine Anmerkungen und Vorschläge. Lesen Sie seine Antwort für vollständige Details.
ZonedDateTime.parse(
"Jun 13 2003 23:11:52.454 UTC" ,
DateTimeFormatter.ofPattern ( "MMM d uuuu HH:mm:ss.SSS z" )
)
.toInstant()
.toEpochMilli()
1055545912454
Diese Antwort erweitert die Answer by Lockni .
DateTimeFormatter
Definieren Sie zunächst ein Formatierungsmuster für Ihre Eingabe, indem Sie ein DateTimeFormatter
-Objekt erstellen.
String input = "Jun 13 2003 23:11:52.454 UTC";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MMM d uuuu HH:mm:ss.SSS z" );
ZonedDateTime
Analysiere den String als ZonedDateTime
. Sie können sich diese Klasse wie folgt vorstellen: (Instant
+ ZoneId
).
ZonedDateTime zdt = ZonedDateTime.parse ( "Jun 13 2003 23:11:52.454 UTC" , f );
zdt.toString (): 2003-06-13T23: 11: 52.454Z [UTC]
Ich empfehle nicht, Datum/Uhrzeit-Werte als Count-from - Epoch zu verfolgen. Dies macht das Debuggen schwierig, da Menschen ein aussagekräftiges Datum und eine Uhrzeit nicht aus einer Zahl unterscheiden können, so dass ungültige/unerwartete Werte vorübergehen können. Auch solche Zählungen sind mehrdeutig, in Granularität (ganze Sekunde, Milli, Mikro, Nano usw.) und in Epoche (mindestens zwei Dutzend in verschiedenen Computersystemen).
Wenn Sie jedoch darauf bestehen, können Sie aus der Epoche des ersten Moments von 1970 in UTC (1970-01-01T00:00:00
) über die Instant
-Klasse Millisekunden zählen. Beachten Sie, dass dies Datenverlust bedeutet, wenn Sie Nanosekunden auf Millisekunden verkürzen.
Instant instant = zdt.toInstant ();
instant.toString (): 2003-06-13T23: 11: 52.454Z
long millisSinceEpoch = instant.toEpochMilli() ;
1055545912454
Das Java.time -Framework ist in Java 8 und höher integriert. Diese Klassen ersetzen die störenden alten Datum-Zeit-Klassen wie Java.util.Date
, .Calendar
, & Java.text.SimpleDateFormat
.
Das Joda-Time -Projekt, jetzt im Wartungsmodus , empfiehlt die Migration zu Java.time.
Weitere Informationen finden Sie im Oracle Tutorial . In Stack Overflow finden Sie viele Beispiele und Erklärungen.
Ein Großteil der Java.time-Funktionalität ist auf Java 6 & 7 in ThreeTen-Backport und weiter auf Android in ThreeTenABP (siehe Verwendung…) ).
Das ThreeTen-Extra -Projekt erweitert Java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von Java.time. Hier finden Sie einige nützliche Klassen, wie zum Beispiel Interval
, YearWeek
, YearQuarter
und more .
Erstellen Sie eine allgemeine Methode zum Konvertieren von Zeichenfolgen in das Datumsformat
public static void main(String[] args) throws Exception {
long test = ConvertStringToDate("May 26 10:41:23", "MMM dd hh:mm:ss");
long test2 = ConvertStringToDate("Tue, Jun 06 2017, 12:30 AM", "EEE, MMM dd yyyy, hh:mm a");
long test3 = ConvertStringToDate("Jun 13 2003 23:11:52.454 UTC", "MMM dd yyyy HH:mm:ss.SSS zzz");
}
private static long ConvertStringToDate(String dateString, String format) {
try {
return new SimpleDateFormat(format).parse(dateString).getTime();
} catch (ParseException e) {}
return 0;
}
String dateTime="15-3-2019 09:50 AM" //time should be two digit like 08,09,10
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy hh:mm a");
LocalDateTime zdt = LocalDateTime.parse(dateTime,dtf);
LocalDateTime now = LocalDateTime.now();
ZoneId zone = ZoneId.of("Asia/Kolkata");
ZoneOffset zoneOffSet = zone.getRules().getOffset(now);
long a= zdt.toInstant(zoneOffSet).toEpochMilli();
Log.d("time","---"+a);
sie können die Zonen-ID aus diesem Link !