2017-08-30 269 views
0

我使用EST时区的在Java wriiten一段代码,让我准确的时间如下:DST同时使用EST时区的Java代码

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); 

    } 
} 

在这里,我想增加对日光的代码节省时间与使用EST时区,我的输出应该给我正确的时间考虑EST时区和夏令时也。

知道的任何帮助, 在此先感谢

+0

@ZakiAnwarHamdani我读的问题,其解决方案,它并没有回答我的问题在这里 – Nyki

+1

要求考虑在时区夏令时。那就是在另一个问题中提出并回答的问题。你与这个问题有什么不同? –

+0

另外,如果可以的话,避免使用过时的类“日期”和朋友。您可以。特别是,避免使用'TimeZone.setDefault()',它可能不仅会破坏您自己程序中的功能,还会破坏运行在相同JVM中的其他程序的功能。我推荐'LocalDateTime.now(ZoneId.of(“America/New_York”)).format(DateTimeFormatter.ofPattern(“yyyyMMdd-HHmmss”))''。 –

回答

1

令人困惑的是,TimeZone.getTimeZone("EST")不相同的方式,不遵守夏令时。 (HSTMST也是如此)。代替使用TimeZone.getTimeZone("America/New_York")

通常,避免使用三个字母的时区缩写,因为它在Javadoc中声明。

+1

正确的想法,但使用现在遗留下来的麻烦的旧日期时间类,由java.time类代替。 –

3

java.time

使用取代麻烦的旧的遗留日期时间类的现代java.time类。

避免使用3-4字母代码,如EST。这些不是实际的时区,不是标准化的,甚至不是唯一的!以continent/region的形式使用real time zone names

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

ISO 8601

我建议你考虑生成字符串,而不是你的特殊格式时,使用标准的ISO 8601种格式。标准格式在生成/解析字符串时在java.time类中默认使用。

但如果你坚持......

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