Frage

Ich bin in der Notwendigkeit einer Methode GregorianCalendar Objekt auf Unix-Zeit (das heißt eine lange) zu konvertieren. Auch braucht eine Methode, die Unix-Zeit (lang) zurück zu GregorianCalendar Objekt zu konvertieren. Gibt es Methoden gibt, die nicht das? Wenn nicht, wie kann ich es tun? Jede Hilfe wäre sehr geschätzt.

Link zur GregorianCalendar Klasse -> http : //download.oracle.com/javase/1.4.2/docs/api/java/util/GregorianCalendar.html

Danke.

War es hilfreich?

Lösung

Die Methoden getTimeInMillis() und setTimeInMillis(long) lassen Sie die Zeit in Millisekunden erhalten und eingestellt, die die Unix-Zeit mit 1000 multipliziert ist Sie manuell einstellen müssen, um da die Unix-Zeit Millisekunden nicht enthalten -. Nur Sekunden

long unixTime = gregCal.getTimeInMillis() / 1000;
gregCal.setTimeInMillis(unixTime * 1000);

Abgesehen : Wenn Sie Daten eine Menge in Ihrer Anwendung verwenden, vor allem, wenn Sie Daten oder die Verwendung mehrerer Zeitzonen konvertieren, würde ich empfehlen die JodaTime Bibliothek. Es ist sehr komplett und ziemlich viel natürlicher als das Kalendersystem zu verstehen, die mit Java kommt.

Andere Tipps

Calendar.getTimeInMillis () sollte das sein, was Sie suchen.

tl; dr

myGregCal.toZonedDateTime().toEpochSecond()                     // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`.

Und geht in die andere Richtung ...

GregorianCalendar.from(                                         // Convert from modern `ZonedDateTime` to troublesome legacy class `GregorianCalendar`.
    Instant.ofEpochSecond( yourCountOfWholeSecondsSinceEpoch )  // Moment in UTC.
        .atZone(                                                // Apply `ZoneId` to `Instant` to produce a `ZonedDateTime` object.
            ZoneId.of( "Africa/Tunis" ) 
        )
)                                                              

Vermeiden Vermächtnis Datum Zeitklassen

Die anderen Antworten sind richtig und kurz. Aber, FYI, die störenden alten Datum-Zeit-Klassen wie java.util.Date , java.util.Calendar und java.text.SimpleDateFormat sind jetzt Erbe , durch die java.time Klassen gebaut in Java 8 & Java 9.

Hier ist also, wie zu konvertieren und die modernen Klassen stattdessen für Ihr Problem zu verwenden.

java.time

Konvertieren von der Legacy-Klasse GregorianCalendar die moderne Klasse ZonedDateTime. Rufen Sie neue Methoden hinzugefügt, um die alten Klassen.

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;

Und geht in die andere Richtung ...

GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;

Wenn von „Unix time“ eine Anzahl von ganzen Sekunden, da die gemeint epocheReferenz ersten Moment der 1970 in UTC, 1970-01-01T00: 00: 00Z , dann toEpochSecond nennen.

long secondsSinceEpoch = zdt.toEpochSecond() ;

Wenn Sie eine Anzahl von Millisekunden seit 1970 bedeuten in UTC begannen, dann einen Instant extrahieren. Die Instant Klasse stellt einen Moment auf die Timeline in UTC mit einer Auflösung von ns (bis zu neun (9) Stellen einer Dezimalbruch).

Instant instant = zdt.toInstant() ;

Jetzt für die Zählung fragen von Millisekunden .

long millisecondsSinceEpoch = instant.toEpochMill() ;

Beachten Sie, dass entweder für ganze Sekunden zu fragen oder Millisekunden Datenverlust beinhaltet. Die ZonedDateTime und Instant sowohl Entschlossenheit zu Nanosekunden. So dass jeder Mikrosekunden oder Nanosekunden, die vorhanden ignoriert werden können, wie Sie Ihre ganzen Sekunden oder Millisekunden zählen .


über java.time

Die java.time Rahmen 8 in Java gebaut und später. Diese Klassen verdrängen die lästige alte Vermächtnis Datum Zeitklassen wie java.util.Date , Calendar & SimpleDateFormat .

Die Joda-Time Projekt jetzt in < a href = "https://en.wikipedia.org/wiki/Maintenance_mode" rel = "nofollow noreferrer"> Wartungsmodus , rät Migration auf die java.time Klassen.

Um mehr zu erfahren, finden Sie in der Oracle Tutorial . Und Stack-Überlauf suchen viele Beispiele und Erklärungen. Spezifikation JSR 310 .

Mit einem JDBC-Treiber kompatibel mit JDBC 4.2 oder später, können Sie tauschen java.time Objekte direkt mit Ihrer Datenbank. Keine Notwendigkeit für Strings noch java.sql. * Klassen.

Wo die java.time Klassen erhalten?

Die ThreeTen-Extra Projekt erstreckt java.time mit zusätzlichen Klassen. Dieses Projekt ist eine Bewährungsprobe für eine mögliche zukünftige Ergänzungen java.time. Sie können einige nützliche Klassen hier wie Interval YearWeek , YearQuarter und mehr .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top