2017-08-30 4 views
0

Ich habe ein Stück Code in Java wriiten, die mir die richtige Zeit mit EST-Zeitzone wie unten gibt:DST während in Java-Code EST-Zeitzone mit

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 

public class DateProgram { 

    public static void main(String[] args) { 
     TimeZone.setDefault(TimeZone.getTimeZone("EST")); 
     String dateTime = new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date()); 
     System.out.println(dateTime); 

    } 
} 

Hier ich den Code für Daylight hinzufügen wollte Zeit sparen mit der EST-Zeitzone, meine Ausgabe sollte mir die richtige Zeit in Bezug auf die EST-Zeitzone und die Sommerzeit geben.

jede Hilfe dankbar, Vielen Dank im Voraus

+0

@ZakiAnwarHamdani ich diese Frage und ihre Lösungen zu lesen, ist es nicht meine Frage hier gefragt beantworten – Nyki

+1

Tage Licht Zeitersparnis Zone Unter Berücksichtigung. Das ist, was in der anderen Frage gefragt und beantwortet wird. Wie unterscheidet sich deine von dieser Frage? –

+0

Als beiseite, vermeiden Sie die lange veraltete Klassen "Date" und Freunde, wenn Sie können. Sie können. Vermeiden Sie insbesondere 'TimeZone.setDefault()', es kann die Funktionalität nicht nur in Ihrem eigenen Programm, sondern auch in anderen Programmen unterbrechen, die in derselben JVM laufen. Ich empfehle 'LocalDateTime.now (ZoneId.of (" America/New_York ")) .format (DateTimeFormatter.ofPattern (" yyyyMMdd-HHmmss "))'. –

Antwort

1

Verwirrend ist TimeZone.getTimeZone("EST") nicht die Sommerzeit auf die gleiche Art und Weise beobachten, dass tut. (Dasselbe gilt für HST und MST).

Verwenden Sie stattdessen TimeZone.getTimeZone("America/New_York").

Vermeiden Sie im Allgemeinen die Verwendung von aus drei Buchstaben bestehenden Zeitzonenabkürzungen, wie im Javadoc angegeben.

+1

Richtiger Gedanke, aber mit den lästigen alten Datum-Zeit-Klassen, die jetzt veraltet sind, ersetzt durch die java.time Klassen. –

3

java.time

Mit den modernen java.time Klassen, die die lästigen alten Legacy-Datum-Zeit-Klassen ersetzen.

Vermeiden Sie die 3-4 Buchstabencodes wie EST. Dies sind keine tatsächlichen Zeitzonen, nicht standardisiert und sind nicht einmal einzigartig! Verwenden Sie real time zone names in Form von continent/region.

ZoneId z = ZoneId.of("America/Montreal") ; 
ZonedDateTime zdt = ZonedDateTime.now(z) ; 

ISO 8601

Ich schlage vor, Sie betrachten die Norm ISO 8601-Formate zu verwenden, wenn Strings, anstatt Ihre eigentümliche Format zu erzeugen. Die Standardformate werden in den java.time-Klassen standardmäßig beim Generieren/Parsen von Strings verwendet.

Aber wenn Sie darauf bestehen ...

DateTimeFormatter f = DateTimeFormatter.ofPattern("uuuuMMdd-HHmmss") ; 
String output = zdt.format(f) ;