Ruby时区字符串到java时区

Ruby时区字符串到java时区,java,ruby,timezone,Java,Ruby,Timezone,我有一个ruby进程,它根据数据库时区进行写操作,因此在表中我得到如下字符串: “太平洋时间(美国和加拿大)” “东部时间(美国和加拿大)” “UTC” “巴黎” 等等。。 有没有办法(不是硬编码的映射)读取这些字符串并将其转换为 Rails时区名称到标准TZDB/IANA时区标识符的权威来源是Rails源代码中的TimeZone.MAPPING常量。如果您能够在Rails代码中访问这个映射,那么您不需要硬编码任何东西 如果您需要在Java代码中进行翻译(如问题注释中所示),那么您必须将Ra

我有一个ruby进程,它根据数据库时区进行写操作,因此在表中我得到如下字符串:

  • “太平洋时间(美国和加拿大)”
  • “东部时间(美国和加拿大)”
  • “UTC”
  • “巴黎”
等等。。
有没有办法(不是硬编码的映射)读取这些字符串并将其转换为

Rails时区名称到标准TZDB/IANA时区标识符的权威来源是Rails源代码中的
TimeZone.MAPPING
常量。如果您能够在Rails代码中访问这个映射,那么您不需要硬编码任何东西

如果您需要在Java代码中进行翻译(如问题注释中所示),那么您必须将Rails代码中的映射解析为Java代码中可用的内容,并定期检查更改。谢天谢地,Rails开发人员似乎并不经常更改此列表

我不知道有哪个Java库已经为您实现了这一点,但是.NET开发人员可以利用我的库,它导入了这个映射。如果您想为此编写自己的代码,请随意将我的函数从C#翻译成Java


另请参见的底部的我的Rails时区名称注释。

没有内置的简易方法。我不知道有任何外部库或数据库可能会有帮助,但我会搜索一个。你不迁移到吗?
TimeZone
类早已过时,设计也很糟糕,而它的朋友,如
Calendar
DateFormat
,则更糟糕。现代的API非常好用。您想要时区的类是
ZoneId
。您的问题是,编写Ruby程序的人混淆了表示和存储,并将用户友好的字符串保存到数据库中,而不是适合程序的字符串。如果你能说服Ruby保存像
America/New_York
这样的字符串,你的境况会更好(例如,地区/城市)。您链接到的页面似乎表明Ruby也知道这样的字符串,但我不知道这是如何工作的。如果您无法更改现有的DB列,您可以添加一个具有适当格式的冗余DB列吗?或者更好,转换表?与@OleV.V一致。;就几张便条。a) 这不是Ruby,而是Rails。b) 时区::映射就在链接页面上;只要把它翻译成Java
TreeMap
或者别的什么东西,Java就可以
TimeZone.getTimeZone(railsTimezoneMapping[railsName])
。谢谢大家,我想我会使用ZoneId(感谢@OleV.V.),并将其硬编码,因为我无法接触rails代码(其他人正在使用它,重构成本太高)。