类似cli的时区选择建议

CLI-like Timezone Selection advice

本文关键字:选择 时区 cli 类似      更新时间:2023-09-26

简要总结:纯粹通过基于文本的用户输入来获取时区的最佳方式/最佳实践是什么?我在尝试一个非常棘手的任务吗?

背景是:我正在研究一个nodejs聊天机器人,它可以帮助安排一个主要在北美的小组的活动,但也有来自全球各地的参与者。我能够听取各种用户输入和相应的响应。但是,除了用户名之外,我可用的API不返回任何其他内容。

我的命令输入计划如下所示:

!Event datetime="MM-DD-YYYY h:mm a" timezone="PST" name="Foobar"

Through moment我可以用datetime解析一个moment。然而,我在应用时区方面失败了。我的客户通常不熟悉UTC/GMT系统。他们大多以北美或欧盟为基础,更习惯于缩写。我想使它尽可能地用户友好,但是我如何将它们的时区输入映射到tz数据库样式以便在代码中使用呢?我可以把他们重定向到关于tz数据库和所有不同城市的wiki页面,但它是一个相当大的列表,对普通人来说不是很友好。

我正在尝试时刻-时区,我所拥有的最接近的东西基本上是UTC偏移到描述+ tz数据库名称的映射表。比如:

var TIMEZONE_MAPPINGS = {
    "UTC+9" : "Asia/Tokyo",
    ...
    "UTC-8" : "America/Los_Angeles",
}

但我觉得这是非常hackish,并不是真的很适合夏令时,当我选择一个"众所周知"的项目为每个偏移。

有更好的方法来接收这样的输入吗?或者我应该放弃,通过UTC接收所有的东西,然后解释一下UTC是什么?

您应该只接受tzdb区域id,例如"America/Los_Angeles"

  • 缩写不起作用,因为缩写可能有歧义。考虑到CST有5种不同的含义,包括中国标准时间。

  • 来自固定偏移量的偏移量或映射不起作用,因为"Time Zone != Offset"。查看时区标签wiki在这里的StackOverflow。

    特别地,考虑到"America/Los_Angeles"在一年中的部分时间里只有UTC-8,当它处于太平洋标准时间时。在一年中的其他时间,即夏季,使用UTC-7表示太平洋夏令时。

    另外,考虑到UTC+9在几个地方被观测到,而不仅仅是在"Asia/Tokyo"。例如,"Asia/Yakutsk "全年使用,而"Asia/Ulaanbaatar"只在夏季使用。

在命令行中,没有比原始标识符更好的选择了。如果您有某种UI,那么您可以提示本地化选择,但是对于原始命令行,您可以做的事情不多。