【发布时间】:2019-04-10 14:59:52
【问题描述】:
我想检查夏令时开始前后的时间差。我正在使用时区与 DST WRT 巴西时间存在问题的 JVM。我可以看到输出显示 10 月 21 日属于 DST,这是错误的,因为夏令时从 11 月 4 日开始。我想看看 10 月 20 日到 10 月 21 日之间的时间差是 1 小时,由于 JRE 时区问题,我可以在我的申请中看到。有什么办法可以通过程序实现这一点。下面是我用来查看日期是否在 DST 下的代码。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class Timezone
{
public static void main(String[] args) throws ParseException {
TimeZone TIMEZONE = TimeZone.getTimeZone("Brazil/East");
System.out.println("timeZone : " + TIMEZONE);
Calendar c = Calendar.getInstance(TIMEZONE);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
dateFormat.setTimeZone(TIMEZONE);
Date date = dateFormat.parse("2018-10-20T00:00:00");
c.setTime(date);
System.out.println("In dst " + c.getTimeZone().inDaylightTime(c.getTime()));
date = dateFormat.parse("2018-10-21T00:00:00");
c.setTime(date);
System.out.println("In dst " + c.getTimeZone().inDaylightTime(c.getTime()));
date = dateFormat.parse("2018-11-04T00:00:00");
c.setTime(date);
System.out.println("In dst " + c.getTimeZone().inDaylightTime(c.getTime()));
}
}
进一步补充我的问题,我能够通过使用我的上述程序来确定夏令时。我想要它应该向我展示的东西:10 月 20 日的时间是上午 9 点,而同一时间由于 DST 移动了 1 小时,即上午 10 点。有什么方法可以实现吗?
预期输出:
timeZone : sun.util.calendar.ZoneInfo[id="Brazil/East"]
Time is: 21-10-2018 07:52:16
实际输出错误的 JVM:
timeZone : timeZone : sun.util.calendar.ZoneInfo[id="Brazil/East"]
Time is: 21-10-2018 08:52:30
【问题讨论】:
-
java.util.Timezone.inDaylightTime(Date date)等涵盖了这个。 -
感谢您的回复。使用上述程序,我可以知道夏令时的变化。但我想显示类似 10 月 20 日的时间是上午 9 点,而 10 月 21 日它发生了变化由于错误的 DST 到上午 10 点
-
如果你突出显示你的JVM的ACTUAL和EXPECTED行为会更好,这样更容易理解这个问题。
-
您有什么理由使用
TimeZone、Calendar、DateFormat、SimpleDateFormat和Date类吗?它们都设计得很糟糕,现在已经过时了。我推荐java.time, the modern Java date and time API,。