joda时区ID与java时区ID相同吗?

joda时区ID与java时区ID相同吗?,java,android,datetime,jodatime,Java,Android,Datetime,Jodatime,我使用Android上的ACTION_TIMEZONE_CHANGED intent过滤器来响应时区更改 我注意到Jodas current timezone此时未使用以下工具进行更新: DateTimeZone.getDefault() 当我使用Java的默认时区时,getDefault(),时区是正确的 注意:当我再次更改它时:Joda的值与我之前更改的值相同。所以它已经落后了(当Android启动广播意图时还没有更新) 因此,我只能对当前时区使用Java时区。但我的域对象使用Joda Da

我使用Android上的ACTION_TIMEZONE_CHANGED intent过滤器来响应时区更改

我注意到Jodas current timezone此时未使用以下工具进行更新:
DateTimeZone.getDefault()

当我使用Java的默认
时区时,getDefault()
,时区是正确的

注意:当我再次更改它时:Joda的值与我之前更改的值相同。所以它已经落后了(当Android启动广播意图时还没有更新)

因此,我只能对当前时区使用Java时区。但我的域对象使用Joda DateTimeZone的。现在,我想将当前时区与域对象中的时区进行比较。这样做是否可以保存:

TimeZone currenTimeZone = TimeZone.getDefault();
if(action.getLocation().getDateTimeZone().getID().equals(currenTimeZone.getID()))) {
 [...]
}
?? 或者两个库之间的时区ID是否不同?

tl;博士 不,不安全假设时区:

  • 存在
  • 已定义特定标识符
  • 具有相同的定义/规则
tzdata 大多数操作系统和软件库都依赖由维护的来提供当前和过去的时区信息。也称为
tzdata
TZDB
。以前称为奥尔森数据库

频繁变化 在世界各地,政客们喜欢频繁地改变、重新定义、重新安排、重命名时区定义和规则。他们这样做通常没有什么预警,比如现在(2016年秋季)不到两个月

有时会定义新的时区。因此,在这方面,请具体回答您的问题:是的,tzdata的某些副本可能具有旧副本中不存在的较新时区定义,因此可能存在时区标识符的差异

此外,有时会给现有时区起新名称。例如,随着印度最近恢复其城市名称,
Asia/Calcutta
现在也被标记为
Asia/Kolkota
。同样,旧的tzdata副本将不知道这个新名称

大陆/地区
的格式指定,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

一些软件将扩展tzdata以尝试识别这些伪时区。这不是个好主意。但是,同样,这意味着使用这些非标准时区标识符可能在一个地方有效,但在另一个地方无效。坚持使用官方时区名称

有些区域有一个时间限制,例如英国时间。但是你不应该把它作为一个标识符

更新 系统管理员必须努力在可能使用tzdata的所有不同位置更新tzdata:

  • 操作系统
  • Java虚拟机
  • 软件库(如Joda Time,可能还有)
JVM的提供者通常在JVM的更新中包含tzdata的最新版本。但政客们在时区上玩得比Java更新更频繁。因此,您可能需要手动更新JVM。Oracle为Oracle和OpenJDK JVM提供了支持

Joda Time包含自己的tzdata副本。所以您需要更新Joda时间库或手动替换tzdata。请注意,Joda Time项目现在处于维护模式,建议迁移到与java 8和更高版本捆绑的java.Time类

列出已知标识符 time类可以向您显示它们的

用它来获得特定区域的当前力矩

ZonedDateTime zdt = ZonedDateTime.now( z );
tl;博士 不,不安全假设时区:

  • 存在
  • 已定义特定标识符
  • 具有相同的定义/规则
tzdata 大多数操作系统和软件库都依赖由维护的来提供当前和过去的时区信息。也称为
tzdata
TZDB
。以前称为奥尔森数据库

频繁变化 在世界各地,政客们喜欢频繁地改变、重新定义、重新安排、重命名时区定义和规则。他们这样做通常没有什么预警,比如现在(2016年秋季)不到两个月

有时会定义新的时区。因此,在这方面,请具体回答您的问题:是的,tzdata的某些副本可能具有旧副本中不存在的较新时区定义,因此可能存在时区标识符的差异

此外,有时会给现有时区起新名称。例如,随着印度最近恢复其城市名称,
Asia/Calcutta
现在也被标记为
Asia/Kolkota
。同样,旧的tzdata副本将不知道这个新名称

大陆/地区
的格式指定,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

一些软件将扩展tzdata以尝试识别这些伪时区。这不是个好主意。但是,同样,这意味着使用这些非标准时区标识符可能在一个地方有效,但在另一个地方无效。坚持使用官方时区名称

有些区域有一个时间限制,例如英国时间。但是你不应该把它作为一个标识符

更新 系统管理员必须努力在可能使用tzdata的所有不同位置更新tzdata:

  • 操作系统
  • Java虚拟机
  • 软件库(如Joda Time,可能还有)
JVM的提供者通常在JVM的更新中包含tzdata的最新版本。但政客们在时区上玩得比Java更新更频繁。因此,您可能需要手动更新JVM。Oracle为Oracle和OpenJDK JVM提供了支持

乔德
ZoneId z = ZoneId.systemDefault() ;
String zoneIdentifier = z.toString() ;
ZonedDateTime zdt = ZonedDateTime.now( z );