0

速記摘要:什麼是走在一個時區通過基於文本的用戶輸入純粹的最佳方式/最佳做法?我試圖做一個非常粘性的任務嗎?類似CLI的時區選擇建議

背景是:我的工作,是爲了能夠幫助安排活動爲主要是基於在北美一組的NodeJS聊天機器人,而是來自世界各地以及具有參與者。我能夠聽取各種用戶輸入並作出相應的響應。但是,除了用戶名之外,可用於我的API不會返回任何其他內容。

我的命令輸入計劃如下所示:

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

通過此刻我能夠解析了一下與日期時間。但是,我沒有應用時區。我的客戶通常不熟悉UTC/GMT系統。他們中的大多數都以NA或EU爲基礎,更多地用於縮寫。我想盡可能使用戶友好,但是如何將他們的時區輸入映射到代碼中使用的tz數據庫樣式?我可以將它們重定向到關於tz數據庫和所有城市的維基頁面,但它是一個相當大的列表,與一般的joe不太友好。

我與矩時區的實驗,我有最接近的事基本上是UTC的偏移量的映射表來描述+ A TZ數據庫名稱。喜歡的東西:

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

但我覺得這是非常hackish的,而不是DST真的不太妙,而我選擇每個偏移一個「衆所周知」的項目。

有沒有更好的方式來採取這樣的投入?或者我應該放棄並通過UTC接收所有內容,並解釋UTC是什麼?

+0

是否有可能將用戶的瀏覽器時區傳遞給chatbot http://stackoverflow.com/questions/1091372/getting -the-clients-timezone-in-javascript而不必輸入時區? – Detect

+0

不幸的是,我無法訪問該信息。我有一個偵聽器獲取一個消息對象,然後將其解析爲:{user:,content:,timestamp(in utc epoch):} –

回答

1

你應該只需要在TZDB區域ID,如"America/Los_Angeles"

  • 縮寫是行不通的,因爲縮寫可以是不明確的。考慮到「CST」有5種不同的含義,包括中國標準時間。 See more on Wikipedia

  • 由於「時區!=偏移」,固定偏移的偏移或映射不起作用。請參閱StackOverflow上的timezone tag wiki

    特別是,考慮到"America/Los_Angeles"在太平洋標準時間的一年中部分時間只是UTC-8。今年的另一部分,夏季,太平洋夏令時是UTC-7。

    此外,請考慮在幾個地方觀察到UTC + 9,而不僅僅是"Asia/Tokyo"。例如,"Asia/Yakutsk「使用它全年,但"Asia/Ulaanbaatar"只在夏季使用它。

在命令行中,真的有比原始標識符上沒有更好的選擇,如果你有某種UI的再你可以提示本地化選擇,但是用原始命令行可以做的其他事情不多。

+0

這就是我想要做的事情,除非我不認爲我的用戶將知道所有這些,除非我能夠向他們提供參考表,這違背了可用性。 –

+0

好吧,我想這是沒有迴避的。感謝您爲我清理它! –

+0

您可以隨時將用戶指向https://en.wikipedia.org/wiki/List_of_tz_database_time_zones –