类似 CLI 的时区选择建议
CLI-like Timezone Selection advice
Shorthand 摘要:纯粹通过基于文本的用户输入获取时区的最佳方式/最佳实践是什么?我是在尝试一项非常棘手的任务吗?
背景是:我正在开发一个 nodejs 聊天机器人,旨在能够帮助为一个主要位于北美但也有来自全球各地的参与者的团体安排活动。我能够听取各种用户输入并做出相应的响应。但是,除了用户名,我可用的 API 没有 return 任何其他内容。
我的命令输入计划如下所示:
!Event datetime="MM-DD-YYYY h:mm a" timezone="PST" name="Foobar"
通过时刻,我能够用日期时间解析时刻。但是,我无法应用时区。我的客户通常不熟悉 UTC/GMT 系统。他们中的大多数都基于NA或EU,并且更习惯于缩写。我想让它尽可能对用户友好,但是我如何将他们的时区输入映射到 tz 数据库样式以便在代码中使用?我可以将它们重定向到关于 tz 数据库和所有不同城市的 wiki 页面,但它是一个相当大的列表,对普通人来说不是很友好。
我正在试验时刻时区,我拥有的最接近的东西基本上是 UTC 偏移量到描述 + tz 数据库名称的映射 table。类似于:
var TIMEZONE_MAPPINGS = {
"UTC+9" : "Asia/Tokyo",
...
"UTC-8" : "America/Los_Angeles",
}
但我觉得这非常骇人听闻,而且在我为每个偏移量选择 "well known" 项目时对 DST 也不是很好。
有没有更好的方法来接收这样的输入?或者我应该放弃并通过 UTC 接受所有内容并解释什么是 UTC?
你应该只接受一个 tzdb 区域 ID,例如 "America/Los_Angeles"
缩写不起作用,因为缩写可能有歧义。考虑 "CST" 有 5 种不同的含义,包括中国标准时间。 See more on Wikipedia.
固定偏移的偏移或映射将不起作用,因为 "Time Zone != Offset"。请参阅 Whosebug 上的 timezone tag wiki。
特别是考虑到 "America/Los_Angeles"
在一年中的部分时间(在太平洋标准时间)仅是 UTC-8。一年中的其他时间,即夏季,太平洋夏令时为 UTC-7。
此外,考虑到 UTC+9 在多个地方得到遵守,而不仅仅是 "Asia/Tokyo"
。例如,"Asia/Yakutsk
"全年使用,但"Asia/Ulaanbaatar"
仅在夏季使用。
在命令行中,确实没有比原始标识符更好的选择了。如果您有某种 UI 那么您可以提示进行本地化选择,但是您可以使用原始命令行做的事情不多。
Shorthand 摘要:纯粹通过基于文本的用户输入获取时区的最佳方式/最佳实践是什么?我是在尝试一项非常棘手的任务吗?
背景是:我正在开发一个 nodejs 聊天机器人,旨在能够帮助为一个主要位于北美但也有来自全球各地的参与者的团体安排活动。我能够听取各种用户输入并做出相应的响应。但是,除了用户名,我可用的 API 没有 return 任何其他内容。
我的命令输入计划如下所示:
!Event datetime="MM-DD-YYYY h:mm a" timezone="PST" name="Foobar"
通过时刻,我能够用日期时间解析时刻。但是,我无法应用时区。我的客户通常不熟悉 UTC/GMT 系统。他们中的大多数都基于NA或EU,并且更习惯于缩写。我想让它尽可能对用户友好,但是我如何将他们的时区输入映射到 tz 数据库样式以便在代码中使用?我可以将它们重定向到关于 tz 数据库和所有不同城市的 wiki 页面,但它是一个相当大的列表,对普通人来说不是很友好。
我正在试验时刻时区,我拥有的最接近的东西基本上是 UTC 偏移量到描述 + tz 数据库名称的映射 table。类似于:
var TIMEZONE_MAPPINGS = {
"UTC+9" : "Asia/Tokyo",
...
"UTC-8" : "America/Los_Angeles",
}
但我觉得这非常骇人听闻,而且在我为每个偏移量选择 "well known" 项目时对 DST 也不是很好。
有没有更好的方法来接收这样的输入?或者我应该放弃并通过 UTC 接受所有内容并解释什么是 UTC?
你应该只接受一个 tzdb 区域 ID,例如 "America/Los_Angeles"
缩写不起作用,因为缩写可能有歧义。考虑 "CST" 有 5 种不同的含义,包括中国标准时间。 See more on Wikipedia.
固定偏移的偏移或映射将不起作用,因为 "Time Zone != Offset"。请参阅 Whosebug 上的 timezone tag wiki。
特别是考虑到
"America/Los_Angeles"
在一年中的部分时间(在太平洋标准时间)仅是 UTC-8。一年中的其他时间,即夏季,太平洋夏令时为 UTC-7。此外,考虑到 UTC+9 在多个地方得到遵守,而不仅仅是
"Asia/Tokyo"
。例如,"Asia/Yakutsk
"全年使用,但"Asia/Ulaanbaatar"
仅在夏季使用。
在命令行中,确实没有比原始标识符更好的选择了。如果您有某种 UI 那么您可以提示进行本地化选择,但是您可以使用原始命令行做的事情不多。