java - 为用户偏好创建用户友好的时区列表

标签 java timezone jodatime

下面是从 java 返回的时区列表的片段(我使用 JodaTime 打印了时区偏移量、时区 ID 和长名称)。

(GMT-10:00) HST, Hawaii Standard Time     
(GMT-10:00) Pacific/Apia, -10:00
(GMT-10:00) Pacific/Fakaofo, Tokelau Time
(GMT-10:00) Pacific/Honolulu, Hawaii Standard Time
(GMT-10:00) Pacific/Johnston, Hawaii Standard Time

例如,HSTPacific/HonoluluPacific/Johnston 之间有什么区别?他们似乎都使用夏威夷标准时间,为什么数据库中有 3 个条目?

  • 我的最终目标是为网络应用中的用户偏好创建一个时区列表。

如果我使用 tzDatabase 中的所有时区,则列表很长并且似乎有有效的重复项(上面的示例)。我可以只列出唯一的长格式名称,例如“夏威夷标准时间”,但随后我需要决定如何将其映射到使用相同长名称的任何一个时区。

在这种情况下,其他人会怎么做?如何创建一个用户友好的时区列表并将它们映射到相关的 java TimeZone?

最佳答案

我认为您假设“用户友好”意味着向他们展示一个小列表。事实是,尽管所有这些时区都被某个地方的某个人使用。在您看来,它们可能看起来相同,但它们的行为通常略有不同。我住在萨斯喀彻温省,我们有自己的 CST 版本。长的名字只是“Central Standard Time”,但我们不使用 DST,所以有一半的时间,我们不与真正的 CST 对齐。萨斯喀彻温省甚至有一小块区域的时间相差 15 分钟。即使它们看起来相同,它们也是不同的,我认为您应该允许用户从整个列表中进行选择。

尝试智能缩短列表可能类似于在允许用户选择首选货币时不列出所有可能的货币代码。是的,可能只有少数人使用某些人。当然,目前可能有一些具有相同的转化率。最后,让用户决定他们关心什么。

一种显示大型列表或可能不重要数据且只有少数真正感兴趣的数据的解决方案:首先确定常用的,然后将它们分开到列表的顶部。这可以在各种选择国家的网站上看到,例如:

Canada
United States
------------------
Argentina
Australia
...

这个策略也经常用于我之前的货币示例。对于时区,它可能看起来像这样(如果您的主要用户群在北美):

EST
CST
MST
PST
------------------
Hawaii
Saskatchewan
...

但请记住,这需要您手动预先确定常用时区是什么。

我觉得最好的方法是简单地列出所有时区,按偏移量排序,因为大多数人会知道在哪里可以找到基于偏移量的时区。例如,我总是首先寻找“-6:00”,而不是萨斯喀彻温省。希望这会有所帮助!

关于java - 为用户偏好创建用户友好的时区列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4254368/

相关文章:

java - 无法通过Java项目连接到数据库,但可以使用客户端

iOS 从时区获取地点值

java - 如何更改 Liferay Portal 5.2+ 中的默认时区

java - 以 "+0100"(例如)格式获取时区

java - Joda 或 Java 日期和时间 API 中是否有任何本地化常量,例如 "Today"、 "Tomorrow"、 "Yesterday"等?

java - 如何在 JPA (eclipselink) 中使用 joda 时间?

java - 在按钮单击内显示加载 GIF,并在执行操作后再次隐藏它

java - 读取二进制文件

java - 基于区域设置的 Joda-Time DateTime 格式

添加组件时 Javafx 阶段不会调整大小