java - 获取基于Java中UTC偏移量的时区快捷方式

标签 java date calendar timezone

我想获取基于UTC偏移量的时区快捷方式,如EST(东部标准),PST(太平洋)等。我意识到这不是一个简单的问题,并且基于特定的偏移量可以有多个位置,但这没关系。

我正在尝试使用Util Calendar对象来获取它,但是我似乎没有得到一个字符串,而只是得到了偏移量。

public String foo(int offset)
{
....
return TimeZoneShortcut;
} 


提前致谢。

最佳答案

answer by user2580516是正确的。我可以添加更多。

避免使用三字母代码

三个字母的时区ID既不是标准化的也不是唯一的。避免他们。

例如,IST用于表示India Standard TimeIrish Standard Time。有很多这样的冲突。

时区名称

不要使用3个字母的代码,而应使用正确的时区名称。例如:“欧洲/巴黎”,“美国/蒙特利尔”和“亚洲/加尔各答”。

似乎没有时区名称的官方标准。这让我感到惊讶;希望我错了,有人可以填补我的麻烦。无论如何,通常使用的列表来自tz database(以前称为Olson数据库),称为listed in this Wikipedia page

出色的日期时间库Joda-Time具有一种生成其currently known time zone names列表的方法。

时区名称会随时间变化,其中一些会添加,它们的规则也会变化。所有这些都是由政客和官僚决定的,因此变化是一时的,并不总是明智的。因此,您应注意保持日期时间库为最新,或至少更新其包含的时区数据库。

不可能的问题–无法确定时区

time zone不仅仅是与UTC / GMT的数值偏移。时区还包含Daylight Saving Time(DST)和其他异常的规则集。

因此,您无法从偏移量推断出时区。您可以猜测,但不能确定。

例如,采用+01:00的偏移量。是“欧洲/巴黎”还是“非洲/拉各斯”?两者都比UTC提前一小时。那么您使用哪个有关系吗?是的...法国遵守夏令时,但尼日利亚没有。分配错误的时区意味着您的日期时间计算将是错误的。

另一个转折……也许+01:00是在夏季的伦敦录制的。在夏季,伦敦会观察夏令时并将时钟提前1小时。虽然标准时间是+00:00(在UTC / GMT上),但DST会将其提前一小时。

还有另一种转折……即使您说“只选一个”,哪个?对于仅在标准时间内的+00:00,至少有2个三字母代码(CETMET)和37个跨越两大洲的命名时区。

也许您在想:“我可以使用该日期来确定DST是否有效”。不,DST的开始和结束时间在共享相同偏移量的各个时区中的不同日期。此外,某些国家(时区)足够明智,不会愚弄DST。

因此,关于您的问题是“不是一个简单的问题……但这没关系”是错误的。这不是问题,这是不可能的。就像问题“给生日,确定一个人”一样。您可以确定一个人或时区不正确,但是您不能确定哪个是正确的。

记录带时间的时区

如果知道时区(它的位置和规则)对您很重要,则必须记录时区信息以及日期时间。例如,这可能意味着数据库中有一个额外的字段。

Java 8带来了一个新的java.time.8 package,灵感来自Joda-Time定义的JSR 310。设计人员已经意识到时区作为日期时间值一部分的重要性。结果,他们的设计包括:


主日期时间类以单词“ Zoned”开头,以强调该类包括时区信息:ZonedDateTime
它们在ZonedDateTime类上的toString实现通过将时区的名称附加在方括号中来扩展ISO 8601格式。代替:2014-02-14T20:51:55.427-08:00它输出2014-02-14T20:51:55.427-08:00[America/Los_Angeles]

关于java - 获取基于Java中UTC偏移量的时区快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21791293/

相关文章:

java - combinebykey 和 aggregatebykey 的区别

java - 当月份从零开始时,Excel 将数字格式更改为日期。这是一个奇怪的错误吗?

jquery - 根据所选月份打开完整日历

Java 两个日历日期之间的天数不一致

java - 使用 ExampleMatcher 和 Pageable 检索数据的 JPQL 自定义查询

java - Java中的工作线程可以调用主线程吗?

java - IllegalArgumentException Surface.nativeLockCanvas,编排器,BufferQueue

date - 昨天的日期 flutter 朔迷离

PHP 日期 ISO 8601 日期时区

iphone - Monotouch - 从我的应用程序将事件添加到 iPhone 日历