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 定位时间的主要内容,如果未能解决你的问题,请参考以下文章

CL定位速度

GeoFire 查询完成 - Swift

按键检索 Firebase 对象

iOS干货? 定位

根据用户位置检索地理定位图像[关闭]

CL位置高程精度