Ich habe Millisekunden in bestimmten Protokolldateien, die auf dem Server generiert wurden. Ich kenne auch das Gebietsschema, aus dem die Protokolldatei generiert wurde. Mein Problem besteht darin, Millisekunden in das angegebene Format zu konvertieren. Die Verarbeitung dieses Protokolls erfolgt auf einem Server in einer anderen Zeitzone. Während der Konvertierung in das Programm "SimpleDateFormat" wird das Datum des Computers verwendet, da das formatierte Datum nicht die korrekte Uhrzeit des Servers darstellt. Gibt es eine Möglichkeit, elegant damit umzugehen?
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
GregorianCalendar
,SimpleDateFormat
usw.) und die hervorragende Joda-Time Bibliothek werden jetzt von den modernen verdrängten java.time Klassen.Antworten:
quelle
final Calendar calendar = Calendar.getInstance();
1515436200000l
werde ichcalendar.get(Calendar.MONTH))
so0
!java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .Sie können verwenden
java.util.Date
class verwenden und dann verwenden, um dieSimpleDateFormat
zu formatierenDate
.Wir können das Paket java.time (Tutorial) verwenden - DateTime-APIs, die in Java SE 8 eingeführt wurden.
// Format the date
quelle
java.util.Date
werden abgeschrieben. (Es gibt verbesserte Datums- und Zeit-APIs in JDK8java.time
)java.util.Date
,java.util.Calendar
undjava.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .tl; dr
Einzelheiten
Die anderen Antworten verwenden veraltete oder falsche Klassen.
Vermeiden Sie die alten Datums- und Uhrzeitklassen wie java.util.Date/.Calendar. Sie haben sich als schlecht gestaltet, verwirrend und problematisch erwiesen.
java.time
Das java.time- Framework ist in Java 8 und höher integriert. Ein Großteil der Funktionen wird auf Java 6 & 7 zurückportiert und weiter an Android angepasst . Hergestellt von einigen der gleichen Leute wie Joda-Time .
An
Instant
ist ein Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden . Seine Epoche ist der erste Moment des Jahres 1970 in UTC.Angenommen, Ihre Eingabedaten sind eine Anzahl von Millisekunden von 1970-01-01T00: 00: 00Z (in der Frage nicht klar), dann können wir leicht eine instanziieren
Instant
.Die
Z
in dieser Norm ISO 8601 formatierte Zeichenfolge steht für UTCZulu
und bedeutet UTC .Wenden Sie eine Zeitzone mit einem geeigneten Zeitzonennamen an , um eine zu erhalten
ZonedDateTime
.Sehen Sie diesen Code live auf IdeOne.com .
Asia/Kolkata
Zeitzone ?Ich vermute, Sie haben eine Zeitzone in Indien, die sich auf Ihren Code auswirkt. Wir sehen hier, dass die Anpassung in die
Asia/Kolkata
Zeitzone dieselbe Tageszeit08:55
ergibt , die Sie melden, und die fünfeinhalb Stunden vor unserem UTC-Wert liegt03:25
.Standardzone
Sie können die aktuelle Standardzeitzone der JVM anwenden . Beachten Sie, dass sich die Standardeinstellung jederzeit zur Laufzeit ändern kann . Jeder Code in einem Thread einer App innerhalb der JVM kann den aktuellen Standard ändern. Wenn wichtig, fragen Sie den Benutzer nach der gewünschten / erwarteten Zeitzone.
Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie
java.util.Date
,Calendar
, &SimpleDateFormat
.Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Mit einem JDBC - Treiber mit Einhaltung JDBC 4.2 oder später, können Sie tauschen java.time Objekte direkt mit Ihrer Datenbank. Keine Notwendigkeit für Strings oder java.sql. * Klassen.
Woher bekomme ich die java.time-Klassen?
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden
Interval
,YearWeek
,YearQuarter
, und mehr .quelle
ZoneId.systemDefault()
. Siehe neuen Abschnitt am Ende meiner Antwort.Der einfachste Weg, dies zu tun, ist die Verwendung der Joda DateTime-Klasse und sowohl den Zeitstempel in Millisekunden als auch die gewünschte anzugeben.
Ich empfehle dringend, die integrierten Java-Klassen für Datum und Kalender zu vermeiden. Sie sind schrecklich.
quelle
Wenn der Millis-Wert die Anzahl der Millis seit dem 1. Januar 1970 GMT ist, wie es für die JVM Standard ist, dann ist dies unabhängig von der Zeitzone. Wenn Sie es mit einer bestimmten Zeitzone formatieren möchten, können Sie es einfach in ein GregorianCalendar-Objekt konvertieren und die Zeitzone festlegen. Danach gibt es zahlreiche Möglichkeiten, es zu formatieren.
quelle
Meine Lösung
quelle
So mach ich es:
Sie können auch
getDateInstance(int style)
folgende Parameter verwenden:DateFormat.SHORT
DateFormat.MEDIUM
DateFormat.LONG
DateFormat.FULL
DateFormat.DEFAULT
quelle
Die SimpleDateFormat-Klasse verfügt über eine Methode namens SetTimeZone (TimeZone), die von der DateFormat-Klasse geerbt wird. http://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html
quelle
Einfachster Weg:
quelle
Unten ist meine Lösung, um das Datum von Millisekunden bis zum Datumsformat zu erhalten. Sie müssen Joda Library verwenden , um diesen Code auszuführen.
quelle
Sie können java.time api versuchen;
quelle