【问题标题】:How to convert timezone format in iOS?如何在 iOS 中转换时区格式?
【发布时间】:2019-08-12 04:19:47
【问题描述】:

我的时区格式类似于 GMT+5:30。

TimeZone.current.abbreviation(), this will return string value like: //GMT+5:30

但我需要将上述格式转换为 Asia/Kolkata

如何解决这个问题?

【问题讨论】:

  • 你看TimeZone的其他属性了吗?
  • 是的,TimeZone.current.identifier 返回类似“亚洲/加尔各答”。但我需要将 GMT+5:30 转换为 Asia/Kolkata
  • 你的GMT+5:30是什么形式的?那是String 吗? TimeZone?什么? Edit您的问题详情。
  • 机器人如何判断亚洲/加尔各答的时区是唯一一个 GMT+5:30 的时区?

标签: ios swift timezone


【解决方案1】:

而不是调用:

TimeZone.current.abbreviation()

呼叫:

TimeZone.current.identifier

在您的情况下,您将获得Asia/Kolkata 而不是GMT+5:30

但我们假设您只有一个带有时区缩写的字符串,例如"GMT+5:30"。您无法轻松地将其转换为特定的时区标识符,因为在给定的时间偏移处可能有多个时区。

这是一个小函数,它从缩写字符串创建一个时区,然后找到所有具有相同偏移量的匹配时区标识符。

func matchingTimeZones(abbreviation: String) -> [TimeZone]? {
    if let tz = TimeZone(abbreviation: tzstr) {
        return TimeZone.knownTimeZoneIdentifiers.compactMap { TimeZone(identifier: $0) }.filter { $0.secondsFromGMT() == tz.secondsFromGMT() }
    } else {
        return nil
    }
}

您可以通过以下方式获取"GMT+5:30" 的匹配列表:

let matches = matchingTimeZones(abbreviation: "GMT+5:30")

如果您打印该结果,您将看到其中一个是 "Asia/Calcutta"(在英语区域设置中)。

【讨论】:

  • @rmaddy ,如何将时区标识符转换为缩写? (例如如何将“亚洲/加尔各答”转换为“+05.30”)
  • @IKKA 使用"Asia/Kolkata" 标识符创建TimeZone。然后获取该时区的abbreviation。这已在其他问题中介绍。如果您在新问题上需要进一步帮助,请进行一些搜索。
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
相关资源
最近更新 更多