我在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时区和夏令时。
任何帮助感谢, 提前致谢
答案 0 :(得分:3)
使用现代java.time类来取代麻烦的旧遗留日期时间类。
避免使用EST等3-4个字母代码。这些不是实际的时区,不是标准化的,甚至不是唯一的!以continent/region
。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
我建议您在生成字符串而不是特殊格式时考虑使用标准ISO 8601格式。生成/解析字符串时,默认情况下在java.time类中使用标准格式。
但如果你坚持......
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuMMdd-HHmmss" ) ;
String output = zdt.format( f ) ;
答案 1 :(得分:1)
令人困惑的是,TimeZone.getTimeZone("EST")
没有像PST
那样观察夏令时。 (HST
和MST
)也是如此。
改为使用TimeZone.getTimeZone("America/New_York")
。
通常,避免使用三字母时区缩写,如Javadoc中所述。