在Java中将EST转换为EDT或反之亦然

任何人都可以讲述三件事:

  1. 如何从java.util.Date实例中检索TimeZone?
  2. 如何知道夏令时是否适用?
    我想我可以通过执行timeZone.getDSTSavings来了解它,但我面临的问题是,即使我将系统的日期设为2012年2月1日,我仍然认为该值为正(我猜3600000)
  3. 如何将EST时间转换为EDT,反之亦然?

如何从java.util.Date实例中检索TimeZone?

没有这样的事情。 Date 表示自Unix时代以来的数毫秒,即1970年1月1日午夜。 它与特定的日历系统或时区无关。 换句话说,如果一个朋友和我在一起打电话(零延迟;)并点击我的手指,我们都会同意点击的Date – 即使我正在使用公历和他使用朱利安历法,即使我在伦敦,他在纽约。 这是同一时刻

如何知道夏令时是否适用?我想我可以通过timeZone.getDSTSavings来了解它,但我面临的问题是,即使我将系统的日期设为2012年2月1日,我仍然认为该值为正(我猜3600000)

理想情况下,使用Joda Time而不是java.util.Date / Calendar / TimeZone ,但在TimeZone你可以使用TimeZone.getOffset(long)来查找UTC的偏移量,或者TimeZone.inDaylightTime(Date)来给你一个是/没有答案。

如何将EST时间转换为EDT,反之亦然?

通常这是一个无效的问题 – 因为在任何一个实例中,EST EDT都适用。 您通常从一个时区转换为另一个时区 ,“EDT”和“EST”不是不同的时区 – 它们在同一时区内是不同的偏移。 您要求这样做的事实表明您可能错误地建模您的数据(不幸的是,日期/时间值很容易)。 请提供更多信息,我们可以为您提供更多帮助。

日期存储自1970年代以来的时间(以毫秒为单位),因此不包含时区信息。 您的JVM具有一个区域设置,用于定义此日期的显示方式。

如果要查找JVM设置的TimeZone,请调用’TimeZone.getDefault()’

拥有TimeZone对象后,您可以调用许多函数来确定对于该时区,夏令时是否适用于给定日期:

  • inDaylightTime(日期)

(粗略地)确定两个时区之间的差异:

 long edtOffset = TimeZone.getTimeZone("EDT").getOffset(date.getTime()); long estOffset = TimeZone.getTimeZone("EST").getOffset(date.getTime()); long diff = estOffset - edtOffset; 

虽然我不确定这是多么有效,因为EST和EDT是相互排斥的,以及上面的代码是否会给你你感兴趣的结果(我没有测试过)

  1. 如何从java.util.Date实例中检索TimeZone?

您可以通过以toString()格式查看实例化Date对象的时区来查看它。 例如“Wed May 01 12:00:00 EDT 2013”​​。

如何知道夏令时是否适用?我想我可以通过timeZone.getDSTSavings来了解它,但我面临的问题是,即使我将系统的日期设为2012年2月1日,我仍然认为该值为正(我想3600000)3。如何将EST时间转换为EDT,反之亦然? 这是我的关键问题

Date对象将自动考虑EDT / EST。 例如,如果你有11月28日的实例化Date对象,那么toString()将包括EST而不是EDT。

我最初遇到的问题是我试图将EST用于日光节约时间处于活动状态的日历日期,而Date对象通过在我的时间添加一小时并显示EDT来自动纠正我的错误。

我遇到了类似的问题。 以下解决方案在Matlab中但是调用Java,我的更改只是注释,因为我正在使用Matlab datenum值。 您实际上无法转换时区感知值,因为它们是相同的时区,但这可能有助于处理非时区感知的原始值。

 %c1 GregorianCalendar of now %c2 GregorianCalendar of date in question tz1 = c1.getTimeZone; %Note t2 would be the same in1 = tz1.inDaylightTime(c1.getTime); in2 = tz1.inDaylightTime(c2.getTime); if (in1 == in2) %do nothing elseif in1 %c1 EDT, c2 is EST %Subtract 1 hour to c2 else %c1 EST, c2 EDT %Add 1 hour to c2 end