2017-03-10 1 views
-1

Wir erhalten Datetime-Elemente relativ zur UTC-Zeit wie 2004-04-12T13:20:00Z.Java-Code zum Konvertieren der UTC-Zeit in lokales Datetime mit einem Offset vergleichen

Und wir würden die Datetime zur Ausgabe in dem lokalen Datetime mögen, ist, dass wie 2004-04-12T12:20:00-01:00.

+0

Gehen Sie durch http://stackoverflow.com/questions/12487125/java-how-do-you-convert-a-utc-timestamp-to-local-time. Hoffe, Sie bekommen die richtige Antwort .. – vineeth

+0

Die Java 8 Datum und Uhrzeit Klassen sind perfekt dafür (viel besser als altmodisch 'SimpleDateFormat' und' Calendar'). Kannst du Java 8 benutzen? –

+0

@vineeth, die einzige Antwort dort verwendet die alten Java Datum und Uhrzeit Klassen. Niemand würde das machen wollen, wenn sie Java 8 benutzen könnten. –

Antwort

-1
mit einem Versatz in Bezug auf die UTC-Zeit ausgedrückt

die folgende Lösung Hoffnung funktioniert.

String date_s = "2004-04-12T13:20:00Z"; 
    SimpleDateFormat dt = new SimpleDateFormat("yyyyy-MM-dd'T'HH:mm:ss'Z'"); 
    Date date = dt.parse(date_s); 

    Calendar cal = Calendar.getInstance(); // creates calendar 
     cal.setTime(date); // sets calendar time/date 
     cal.add(Calendar.HOUR, 1); // adds one hour (do any offset that you want here) 
     String out = dt.format(cal.getTime()); 
     System.out.println(out.substring(1)); 
+0

Die schrecklich lästigen 'Date' und' Calendar' Klassen sind nun veraltet, ersetzt durch die java.time Klassen. –

-1

das Java 8 JDK verwenden, können Sie die java.time.Instant Klasse verwenden, um die UTC-Zeit zu beziehen. und die folloowing Klassen für die Offsetzeiten:

java.time.LocalDate java.time.LocalTime java.time.LocalDateTime

Beispiel:

Instant instant = Instant.now(); 
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.ofOffset("MyZoneId", ZoneOffset.ofHours(3))); 
-1

Verwenden ZonedDateTime aus dem Java-API 8 .

ZonedDateTime.ofInstant(Instant.parse("2004-04-12T13:20:00Z"), ZoneId.of("CET")) 

es Sie 2004-04-12T15:20+02:00[CET]

2

Mit den Java 8 Datum und Uhrzeit Klassen geben diese einfach. Nur fangen ist, müssen wir durch ZoneDateTime gehen, wenn wir aus der Standardzeitzone des Computers und dann auf OffsetDateTime wählen möchten, um das gewünschte Ausgabeformat zu erhalten (eine andere Option wäre das Formatieren des Datums und der Uhrzeit mit einer bestimmten ; jetzt Ich verlasse mich auf OffsetDateTime.toString()).

String utcTime = "2004-04-12T13:20:00Z"; 
    OffsetDateTime dateTimeWithOffset = Instant.parse(utcTime).atZone(ZoneId.systemDefault()).toOffsetDateTime(); 
    System.out.println(dateTimeWithOffset); 

Auf meinem Computer die oben druckt

2004-04-12T14:20+01:00 

In der Antwort und der Code, den ich absichtlich haben vermied den Begriff „lokale Datum-Zeit“, die Sie in der Frage verwendet. Dies dient zur Vermeidung von Verwechslungen mit der Klasse LocalDateTime, die für ein Datum und eine Uhrzeit ohne beliebige Zeitzonen- oder Offset-Informationen verwendet wird.

+1

Gute Antwort. Ich schlage vor, den Namen von "localtime" var in etwas wie "offsetDateTime" zu ändern und auf das Missverständnis des ursprünglichen Posters mit dem Begriff "local" hinzuweisen. –

Verwandte Themen