在java代码中使用EST时区时的DST
我有一段用java编写的代码,它给出了使用EST时区的正确时间,如下所示:在java代码中使用EST时区时的DST,java,date,timezone,dst,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
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时区和夏令时,我的输出应该给我正确的时间
感谢您的帮助,
提前感谢让人困惑的是,
时区。getTimeZone(“EST”)
遵守夏令时的方式与PST
不一样。(HST和MST的情况也是如此)
改用TimeZone.getTimeZone(“美国/纽约”)
通常,避免使用三个字母的时区缩写,正如Javadoc中所述。令人困惑的是,
时区。getTimeZone(“EST”)
与PST
不遵守夏令时。(HST和MST的情况也是如此)
改用TimeZone.getTimeZone(“美国/纽约”)
一般来说,避免使用三个字母的时区缩写,正如Javadoc中所述。java.time
使用现代的java.time类来取代麻烦的旧遗留日期时间类
避免使用3-4个字母的代码,如EST。这些不是实际的时区,不是标准化的,甚至不是唯一的!以大陆/地区
的形式使用
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 ) ;
java.time
使用现代的java.time类来取代麻烦的旧遗留日期时间类
避免使用3-4个字母的代码,如EST。这些不是实际的时区,不是标准化的,甚至不是唯一的!以大陆/地区
的形式使用
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 ) ;
@ZakiAnwarHamdani我读了这个问题及其解决方案,它并没有回答我在这里提出的关于时区日光节约的问题。这就是另一个问题所问和回答的。你的问题与这个问题有什么不同?顺便说一句,如果可以的话,尽量避免使用过时很久的课程
Date
和朋友。你可以。特别是,避免使用TimeZone.setDefault()
,它不仅会破坏您自己的程序中的功能,还会破坏在同一JVM中运行的其他程序中的功能。我推荐LocalDateTime.now(ZoneId.of(“America/New_York”)).format(DateTimeFormatter.of模式(“yyyyymmdd HHmmss”)
。只需强调安迪·特纳(Andy Turner)在中已经说过的话:尽可能避免使用三个和四个字母的时区缩写。它们模棱两可,不标准化。例如,根据美国东部标准时间,也可能是指澳大利亚东部标准时间(UTC+10)。@ZakiAnwarHamdani我读了这个问题及其解决方案,但它没有回答我在这里提出的关于在时区节约日光的问题。这就是另一个问题所问和回答的。你的问题与这个问题有什么不同?顺便说一句,如果可以的话,尽量避免使用过时很久的课程Date
和朋友。你可以。特别是,避免使用TimeZone.setDefault()
,它不仅会破坏您自己的程序中的功能,还会破坏在同一JVM中运行的其他程序中的功能。我推荐LocalDateTime.now(ZoneId.of(“America/New_York”)).format(DateTimeFormatter.of模式(“yyyyymmdd HHmmss”)
。只需强调安迪·特纳(Andy Turner)在中已经说过的话:尽可能避免使用三个和四个字母的时区缩写。它们模棱两可,不标准化。例如,根据EST,可能还意味着澳大利亚东部标准时间(UTC+10)。正确的想法,但使用现在遗留的麻烦的旧日期时间类,被java.Time类取代。正确的想法,但使用现在遗留的麻烦的旧日期时间类,被java.Time类取代。