我目前正在开发一个应用程序,我需要获得欧洲/罗马时区的当前日期和时间。为此,我创建了以下方法:
static func getItalianDate() -> Date {
let timezone = TimeZone(identifier: "Europe/Rome")!
let seconds = TimeInterval(timezone.secondsFromGMT(for: Date()))
let date = Date(timeInterval: seconds, since: Date())
return date
}
但是,如果用户从设置中操纵日期和时区,则不会返回正确的值。日期和时间,我不知道如何得到正确的答案。我需要的格式是:"yyyy-MM-dd HH:mm:ss"
任何建议吗?
编辑
我发现这个问题——仍然没有答案——与我在这里面临的问题相同。使用服务器是唯一可用的选择吗?
let dateFormatter = {
var df = DateFormatter()
df.timeZone = Calendar.current.timeZone
df.dateFormat = ”yyyy-MM-dd HH:mm:ss”
return df
}()
let timestamp = dateFormatter.string(from: date)
// display your timestamp
如果你的应用程序需要在时区改变时刷新它的视图(因此重新计算要显示的时间戳),要么在基于UIKit的情况下响应NSSystemTimeZoneDidChange通知,要么在视图基于SwiftUI的情况下使用SwiftUI环境timezone全局变量。
import Foundation
// 1. Choose a date
let today = Date()
// 2. Pick the date components
let hours = (Calendar.current.component(.hour, from: today))
let minutes = (Calendar.current.component(.minute, from: today))
let seconds = (Calendar.current.component(.second, from: today))
// 3. Show the time
print("(hours):(minutes):(seconds)")