【问题标题】:Current Location TimeZone abbrevation当前位置时区缩写
【发布时间】:2023-04-04 18:34:01
【问题描述】:

我想将时区显示为“IST”、“EST”等。 这似乎很简单,但有一个问题。当我使用以下代码时:

let timeZone = TimeZone.current.abbreviation()

对于印度,我得到“GMT+5:30”,但对于多伦多,我得到“EDT”。 请帮忙,或者让我知道其他方式来显示此类缩写。

编辑 1

我想出了一个解决方法,但有时我会遇到一些奇怪的时区:

func getTimeZoneAbbrevation() -> String {
    var returnTimeZone = ""
    let timezone = TimeZone.current.identifier
    let dict = TimeZone.abbreviationDictionary
    for (key,value) in dict {
        if value == timezone {
            returnTimeZone = key
            break
        }
    }
    if returnTimeZone == "" {
            if let timezone = NSTimeZone.default.abbreviation() {
                returnTimeZone = timezone
        }
    }
    return returnTimeZone
}

编辑 2:

【问题讨论】:

  • 你检查过这个吗? stackoverflow.com/questions/27053135/…
  • @kamaldeepsinghbhatia 是的,我已经检查过了,检查我的编辑 1,我已经在我的函数中实现了该代码,但问题是,对于多伦多,它返回我“美国/多伦多”, abbreviationDictionary 中没有。
  • 请注意,您现在应该收到多伦多的"EDT",因为那是当前时区的缩写。他们目前处于东部夏令时间。

标签: ios swift timezone


【解决方案1】:

试试这个

让 timeZoneDict = TimeZone.abbreviationDictionary.filter {
$0.value == TimeZone.current.identifier
}
如果 !timeZoneDict.isEmpty {
让 timeZone = timeZoneDict.first?.key
打印(时区)
}

【讨论】:

  • 不适用于多伦多。 timeZoneDict 为空。
【解决方案2】:

这应该可行。

let someTime = TimeZone(identifier: "America/Toronto")
let timezone = someTime?.abbreviation()

现在timezone 包含值"EDT",所以你可以直接使用它。

仅供参考,如果您想检查这些标识符以便您可以从中获取它

var timeZoneIdentifiers: [String] { return TimeZone.knownTimeZoneIdentifiers }

我希望这对现在有帮助。

【讨论】:

  • 你在多伦多有什么收获?是“EDT”吗?你想在那个地方做什么?
  • 我认为您应该检查列表,因为多伦多没有地方......所以您可能可以检查其他位置。至于印度,只有“亚洲/加尔各答”……只要找到一个在同一时区的城市。
  • 你能告诉我如何做到这一点,找到一个在同一时区的城市
  • @cs832 查看我的编辑我希望这能解决您的问题
  • 有关更多详细信息,请参见此答案。真的很棒stackoverflow.com/a/27053592/5622566
猜你喜欢
  • 2022-01-08
  • 2019-12-15
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
相关资源
最近更新 更多