CLLocation GeoFire 定位时间
Posted
技术标签:
【中文标题】CLLocation GeoFire 定位时间【英文标题】:CLLocation GeoFire Location Time 【发布时间】:2016-11-21 15:41:36 【问题描述】:有谁知道如何在位置结束时打印时间?在以下代码中打印出完整位置时:
打印出Location时结果中的时间与location?.timestamp
的时间存在时间差@可选:
geofire?.setLocation(location, forKey: uid) (error) in
if (error != nil)
print("An error occured: \(error)")
else
print(location)
结果:可选( +/- 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 Central European Standard Time”之前的日期?谢谢
【问题讨论】:
Swift - ios - Dates and times in different format的可能重复 【参考方案1】:CLLocation
中的时间戳只是一个 Date
变量。打印位置和时间戳时会得到不同的结果,因为它们被转换为两个不同的时区。
Date
时间戳表示时间的抽象时刻,没有日历系统或特定时区。另一方面,CLLocation
的描述将该时间转换为您当地的时区,以便更好地说明。它们都是等价的;一个(时间戳)显示15:04:32 GMT
,另一个显示16:04:32 Central European Standard Time
,这是没有夏令时的+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)!)
【讨论】:
以上是关于CLLocation GeoFire 定位时间的主要内容,如果未能解决你的问题,请参考以下文章