Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java代码中使用EST时区时的DST_Java_Date_Timezone_Dst - Fatal编程技术网

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

在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

我有一段用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时区和夏令时,我的输出应该给我正确的时间

感谢您的帮助,
提前感谢

让人困惑的是,
时区。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类取代。