javascript - 类似 CLI 的时区选择建议

标签 javascript node.js timezone command-line-interface momentjs

速记摘要:纯粹通过基于文本的用户输入获取时区的最佳方法/最佳实践是什么?我正在尝试一项非常棘手的任务吗?

背景是:我正在开发一个 Nodejs 聊天机器人,该机器人旨在帮助为一个主要位于北美但也有来自全局各地的参与者的团体安排事件。我能够听取各种用户输入并做出相应的响应。但是,除了用户名之外,我可用的 API 不会返回任何其他内容。

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

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

通过时刻,我能够用日期时间解析时刻。但是,我未能应用时区。我的客户通常不熟悉 UTC/GMT 系统。他们中的大多数位于北美或欧盟,并且更习惯缩写。我想让它尽可能用户友好,但是我如何将他们的时区输入映射到 tz 数据库样式以在代码中使用?我可以将它们重定向到有关 tz 数据库和所有各个城市的 wiki 页面,但这是一个相当大的列表,对于普通人来说不是很用户友好。

我正在尝试使用时刻时区,我拥有的最接近的东西基本上是 UTC 偏移量到描述 + tz 数据库名称的映射表。像这样的东西:

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

但我觉得这非常hackish,而且当我为每个偏移量选择一个“众所周知”的项目时,对于 DST 来说也不是很好。

有没有更好的方法来接受这样的输入?或者我应该放弃并通过 UTC 接收所有内容并解释什么是 UTC?

最佳答案

您应该只接受 tzdb 区域 ID,例如“America/Los_Angeles”

  • 缩写不起作用,因为缩写可能会产生歧义。考虑“CST”有 5 种不同的含义,包括中国标准时间。 See more on Wikipedia .

  • 偏移量或固定偏移量的映射不起作用,因为“时区!=偏移量”。请参阅timezone tag wiki在 StackOverflow 上。

    特别要考虑的是,当采用太平洋标准时间时,“America/Los_Angeles” 在一年中的部分时间仅为 UTC-8。一年中的其他时间,即夏季,太平洋夏令时间为 UTC-7。

    此外,请考虑在多个地方都遵守 UTC+9,而不仅仅是“亚洲/东京”。例如,“Asia/Yakutsk”全年使用,但“Asia/Ulaanbaatar”仅在夏季使用。

从命令行来看,确实没有比原始标识符更好的选择了。如果您有某种用户界面,那么您可以提示进行本地化选择,但是使用原始命令行您无能为力。

关于javascript - 类似 CLI 的时区选择建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33108093/

相关文章:

javascript - PHP + JS 验证不起作用

javascript - 为什么我的嵌套 for 循环中的代码不会被执行?

python - 错误系统调用spawn C :\Windows\system32\cmd. exe

node.js - Node 可读流问题

javascript - 从对象数组中的值组合数组?

Android:有没有办法获取国家名称的时区?

timezone - 生成 ICS 文件时是否应在 UTC 中指定事件时间,以避免无数日历应用程序出现问题

javascript - 如何更改 Meteor.users _id?

javascript - Moment Timezone 在加载时返回 Uncaught TypeError

javascript - 尝试将 SimpleBar 导入 Angular 2 应用程序时,X 不是构造函数