Ich habe Millisekunden in einer bestimmten Protokolldatei, die auf dem Server erstellt wurde, und ich kenne auch das Gebietsschema, in dem die Protokolldatei erstellt wurde. Mein Problem ist die Umwandlung von Millisekunden in ein Datum im angegebenen Format. Die Verarbeitung dieses Protokolls findet auf einem Server statt, der sich in einer anderen Zeitzone befindet. Während der Konvertierung in "SimpleDateFormat" nimmt das Programm das Datum des Rechners, da das so formatierte Datum nicht die korrekte Zeit des Servers darstellt. Gibt es eine Möglichkeit, dies elegant zu handhaben?
long yourmilliseconds = 1322018752992l;
//1322018752992-Nov 22, 2011 9:25:52 PM
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS",Locale.US);
GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("US/Central"));
calendar.setTimeInMillis(yourmilliseconds);
System.out.println("GregorianCalendar -"+sdf.format(calendar.getTime()));
DateTime jodaTime = new DateTime(yourmilliseconds,
DateTimeZone.forTimeZone(TimeZone.getTimeZone("US/Central")));
DateTimeFormatter parser1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss,SSS");
System.out.println("jodaTime "+parser1.print(jodaTime));
Ausgabe:
Gregorian Calendar -2011-11-23 08:55:52,992
jodaTime 2011-11-22 21:25:52,992
Sie können die Klasse java.util.Date
verwenden und dann SimpleDateFormat
zum Formatieren des Date
benutzen.
Date date=new Date(millis);
Wir können das java.time Paket (Tutorial) verwenden - DateTime APIs, die in Java SE 8 eingeführt wurden.
var instance = java.time.Instant.ofEpochMilli(millis);
var localDateTime = java.time.LocalDateTime
.ofInstant(instance, java.time.ZoneId.of("Asia/Kolkata"));
var zonedDateTime = java.time.ZonedDateTime
.ofInstant(instance,java.time.ZoneId.of("Asia/Kolkata"));
// Formatieren des Datums
var formatter = java.time.format.DateTimeFormatter.ofPattern("u-M-d hh:mm:ss a O");
var string = zonedDateTime.format(formatter);
Wenn der millis-Wert die Anzahl der Millisekunden seit dem 1. Januar 1970 GMT ist, wie es für die JVM Standard ist, dann ist das unabhängig von der Zeitzone. Wenn Sie ihn mit einer bestimmten Zeitzone formatieren wollen, können Sie ihn einfach in ein GregorianCalendar-Objekt konvertieren und die Zeitzone festlegen. Danach gibt es zahlreiche Möglichkeiten, ihn zu formatieren.
Am einfachsten ist es, die Joda DateTime-Klasse zu verwenden und sowohl den Zeitstempel in Millisekunden als auch die gewünschte DateTimeZone anzugeben.
Ich empfehle dringend, die eingebauten Java Date- und Calendar-Klassen zu meiden; sie sind schrecklich.