Java中的不同时区

时间:2018-10-16 00:29:31

标签: java

  

如何根据Java 1.7中的不同时区获取日期?

  AST
    EST
    CST
    MST
    PST
    AKST
    HAST

我已经分析了API。根据我的理解,我们需要传递日期格式/ city来获取时间,请参考下面给出的示例代码来获取EST。

static DateTimeFormatter etFormat = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mma 'ET'");
  static ZoneId etZoneId = ZoneId.of("America/New_York");
ZonedDateTime currentETime = currentISTime.withZoneSameInstant(etZoneId);

我需要传递日期格式和城市来获取时间吗?是否有任何通用方法可以基于TimeZone获取时间?

1 个答案:

答案 0 :(得分:1)

真实时区

由2-4个字母组成的缩写,例如EST,IST,PST,CST等不是时区。它们仅提供有关时区的线索,并指出是标准时间还是夏令时(DST)。它们不是标准化的。它们甚至都不是唯一的!永远不要使用这些,不要再考虑它们。

有关Continent/Region格式的真实时区名称列表,请参见Wikipedia。

您的示例代码几乎正确。

ZoneId z = ZoneId.of( "America/New_York" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;

对于与UTC相同的时刻,请提取Instant

Instant instant = zdt.toInstant() ;

调整为印度时间。

ZonedDateTime zdtKolkata = instant.atZone( ZoneId.of ( "Asia/Kolkata" ) ) ;

要生成本地化的字符串,请使用DateTimeFormatter.ofLocalized…

这已经在Stack Overflow上进行了数百次讨论。搜索更多信息。

ThreeTen-Backport

如果您的问题是有关在使用上述Java 7时如何执行此类代码的,则解决方案是 ThreeTen-Backport 项目中的库。您会发现大多数 java.time 功能都具有几乎相同的API。