在Java代码中使用EST时区时的DST

时间:2017-08-30 06:25:08

标签: java date timezone dst

我在java中有一段代码可以使用EST时区给出正确的时间,如下所示:

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时区和夏令时。

任何帮助感谢, 提前致谢

2 个答案:

答案 0 :(得分:3)

java.time

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

避免使用EST等3-4个字母代码。这些不是实际的时区,不是标准化的,甚至不是唯一的!以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 ) ;

答案 1 :(得分:1)

令人困惑的是,TimeZone.getTimeZone("EST")没有像PST那样观察夏令时。 (HSTMST)也是如此。

改为使用TimeZone.getTimeZone("America/New_York")

通常,避免使用三字母时区缩写,如Javadoc中所述。