我有一个计划的工作,需要在不同的时区不同的时间窗口运行。最终,知道 UTC 时间,当它(例如)20:00 在澳大利亚,为了启动这个地区的工作。
UPDATE关于我的用例的更多细节:我有一个需要每几个小时运行一次的计划作业。
这个工作需要在我的每个客户的办公时间之后运行,这是关于他们的时区。
我有每个客户的时区。但是,我需要找出每个时区的时间,以便能够为每个客户运行清理工作。
我无法找到一个关于如何在 Swift 中获取另一个时区的时间的例子?

有许多方法可以获取本地时间,例如使用字符串时区标识符和来自 T 的秒数。并且有许多格式来表示时间,例如字符串和本机Date
对象。你没有在你的问题中指定太多,所以这里是一个起点:
func localTime(in timeZone: String) -> String {
let f = ISO8601DateFormatter()
f.formatOptions = [.withInternetDateTime]
f.timeZone = TimeZone(identifier: timeZone)
return f.string(from: Date())
}
print(localTime(in: "Asia/Tehran")) // 2019-11-20T20:17:13+03:30 (8:17 PM)
世界上有多少个时区并不完全确定,但一般的共识似乎是 38。我更喜欢使用secondsFromT
,因为它比使用字符串标识符更具确定性,因为字符串标识符会发生变化(因为这是一个 Swift 库),而secondsFromT
不能(不改变时区本身)。
// For a list of all time zone string identifiers
for timeZone in TimeZone.knownTimeZoneIdentifiers {
print(timeZone)
}
不幸的是,secondsFromT
无法识别小数时区,并且有相当多的时区;因此,我们可以使用这两种方法来获取 38 的完整列表:
-12:000
>
-00 / 00>i:10
i:10
i:10i
i:10
i:10
i
1

func getDateAndTime(timeZoneIdentifier: String) -> String? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ssZ"
dateFormatter.timeZone = TimeZone(identifier: timeZoneIdentifier)
return dateFormatter.string(from: Date())
}
print(getDateAndTime(timeZoneIdentifier: "UTC")) //2019-11-20 23:37:28 091
您需要将 UTC 时间转换为本地时区。
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss SSS"
formatter.locale = Locale.current
formatter.timeZone = TimeZone.current
let date = dateFormatter.date(from: utcDate)
在这里更改 utcDate 与您要转换为本地的日期。

我想要一个简单格式的时间。即11:23pm
在用户当前区域设置中。
我是这样做的:
func getTimeWithLocale(with timeZone: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .none
dateFormatter.timeStyle = .short
dateFormatter.timeZone = TimeZone(identifier: timeZone)
dateFormatter.locale = .current
let time = dateFormatter.string(from: Date()).lowercased().replacingOccurrences(of: " ", with: "")
return time
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(39条)