有谁知道如何在位置结束时打印时间?在以下代码中打印出完整位置时:
在打印位置时结果中的时间与时间location?.timestamp
之间存在时间差可选:
geofire?.setLocation(location, forKey: uid) { (error) in
if (error != nil) {
print("An error occured: \(error)")
} else {
print(location)
结果:可选(< + xx.xxxxxx,+ xx.xxxxxxxx> +/- 5.00m(速度0.00 mps /航向-1.00)@ 21/11 / 2016,16:04:32中欧标准时间)
并仅打印出来:
print(location?.timestamp)
结果:可选(2016-11-21 15:04:32 +0000)
如何仅打印" 16:04:32中欧标准时间" 甚至是中欧标准时间之前的日期" 21/11/2016,16:04:32 ?谢谢
答案 0 :(得分:0)
CLLocation
中的时间戳只是一个Date
变量。在打印位置和时间戳时,您会得到不同的结果,因为它们会被转换为两个不同的时区。
Date
时间戳表示抽象时刻,没有日历系统或特定时区。另一方面,CLLocation
的说明会将该时间转换为您当地的时区,以便更好地说明。它们都是等价的;一个(时间戳)显示15:04:32 GMT
,另一个显示16:04:32 Central European Standard Time
,即没有DST的+1 GMT。
要从时间戳中获取当地时间,您可以重新格式化Date
这样的对象
let formatter = DateFormatter()
formatter.dateFormat = "HH:mm:ss" // use "dd/MM/yyyy, HH:mm:ss" if you want the date included not just the time
formatter.timeZone = NSTimeZone.local
let timestampFormattedStr = formatter.string(from: (location?.timestamp)!) // result: "16:04:32"
// get timezone name (Central European Standard Time in this case)
let timeZone = NSTimeZone(forSecondsFromGMT: NSTimeZone.local.secondsFromGMT())
let timeZoneName = timeZone.localizedName(.standard, locale: NSLocale.current)!
let timestampWithTimeZone = "\(timestampFormattedStr!) \(timeZoneName)" // results: "16:04:32 Central European Standard Time"
如果当地时间对您的实施至关重要,我建议您检查DST。你可以这样检查
if timeZone.isDaylightSavingTimeForDate((location?.timestamp)!) {
}