0

在这里,我想使用 swift 3 xcode 使用某些特定城市(如America/Mexico_City)的时区获取当前的小时/分钟/秒/毫秒。我试图获得墨西哥城的当前时间-小时/分钟/秒/毫秒,例如,

    let date = Date()
    var calendar = Calendar.current
    calendar.timeZone = TimeZone.init(identifier: "America/Mexico_City")! /* Something wrong here */

    hrOfDay = calendar.component(.hour, from: date)
    curMin = calendar.component(.minute, from: date)
    curSec = calendar.component(.second, from: date)
    curMillSec = Int(Int64(Date().timeIntervalSince1970 * 1000)) /* this should be fetched using calendar object */
    print("hours = \(hrOfDay):\(curMin):\(curSec):\(curMillSec)")

但我无法获得像墨西哥城这样的特定城市的当前时间。所以,请帮帮我。

4

2 回答 2

0

终于解决了

第 1 步: 使用此链接查找城市/国家/地区缩写abbr

第 2 步:使用第 1 步 中提到的链接,您将获得 JsonObject 作为响应,如墨西哥城的示例:

{
"value": "Central Standard Time (Mexico)",
"abbr": "CDT",
"offset": -5,
"isdst": true,
"text": "(UTC-06:00) Guadalajara, Mexico City, Monterrey",
"utc": [
  "America/Bahia_Banderas",
  "America/Cancun",
  "America/Merida",
  "America/Mexico_City",
  "America/Monterrey"
]
}

第 3 步:所以使用下面明确提到的TimeZone.init(abbreviation: "CDT") 之类的缩写键值。

func initVars(){

    var date = Date()
    var calendar = Calendar.current
    calendar.timeZone = TimeZone.init(abbreviation: "CDT")!
    hrOfDay = calendar.component(.hour, from: date)
    curMin = calendar.component(.minute, from: date)
    curSec = calendar.component(.second, from: date)
    curMillSec = calendar.component(.nanosecond, from: date) // may need to convert NANOSECOND to Millisecond // this should be fetchhed using calendat obj
    print("TESTING Current Time = \(hrOfDay):\(curMin):\(curSec):\(curMillSec)")

}

所以最后,结果你会得到:

TESTING Current Time = 10:39:17:812892973

当前墨西哥时间:2017 年 11 月 16 日星期四上午 10:39 (CST) 墨西哥城时间,CDMX,墨西哥

于 2017-11-16T16:46:03.110 回答
0

TimeZone.init(标识符:“America/Mexico_City”)

'America/Mexico_City' 是 ID,而不是名称。

因此,您可以比较从列表中按城市名称获取 TimeZone ID:

https://raw.githubusercontent.com/dmfilipenko/timezones.json/master/timezones.json

参考:https://github.com/dmfilipenko/timezones.json

于 2017-11-16T10:38:17.543 回答