如何根据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获取时间?
答案 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上进行了数百次讨论。搜索更多信息。
如果您的问题是有关在使用上述Java 7时如何执行此类代码的,则解决方案是 ThreeTen-Backport 项目中的库。您会发现大多数 java.time 功能都具有几乎相同的API。