【问题标题】:Timezone is empty if in Los Angeles如果在洛杉矶,时区为空
【发布时间】:2017-07-19 20:53:40
【问题描述】:

为什么当用户在美国时,此代码返回时区为空......? 在其他国家/地区完美运行。

// Get local time zone
let localTimeZoneAbbreviation = TimeZone.current.abbreviation() ?? ""
let indexStartOfText = localTimeZoneAbbreviation.index(localTimeZoneAbbreviation.startIndex, offsetBy: 3) // 3
let timeZone = localTimeZoneAbbreviation.substring(from: indexStartOfText)
print("TimeZone:",timeZone)

我需要数字格式的结果:

“-7”代表洛杉矶

“-4”代表纽约

汉堡“+2”

等等

【问题讨论】:

  • 你为什么要解析字符串?使用TimeZonesecondsFromGMT方法。
  • 如何从 secondsFromGMT 中提取我需要的内容,并且准确地说是在世界各地
  • 可以使用 DateFormatter 并设置dateFormat = "x"
  • let dateFormatter = DateFormatter() dateFormatter.dateFormat = "x" dateFormatter.string(from: Date()) // "-03"
  • @Leo 是的,它需要不带 0。在您的示例中

标签: swift timezone location mapkit


【解决方案1】:

我所在位置的缩写是 PDT,后面没有任何内容。所以,没有偏移量。

您可以像 rmaddy 所说的那样使用秒数​​来获取偏移量。

let seconds = TimeZone.current.secondsFromGMT()
let hours = seconds / 3600
let minutes = abs(seconds / 60) % 60
let timezoneDiff = String(format: "%+.1d:%.2d", hours, minutes)
print(timezoneDiff)

请确保考虑到时间不完全相同的位置。有些是30分钟。可能还有其他人。

【讨论】:

  • 这完全正确,但在这种情况下,服务器只需要整数。我想检查像'let check = timeZoneInt > 0 这样的值? 1 : timeZoneInt == 0 ? 0:-1;'而不是在任何情况下以服务器需要的任何格式进行操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
相关资源
最近更新 更多