2016-11-21 2 views
-3

Кто-нибудь знает, как распечатать время в конце местоположения? при печати из полного расположения в следующем коде:CLLocation GeoFire Время нахождения

Существует разница во времени между временем в результате во время распечатки Место и время 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 Central European Standard Time)

и по только распечатка:

print(location?.timestamp) 

РЕЗУЛЬТАТ: Дополнительно (2016-11-21 15:04:32 +0000)

Как напечатать только "16:04:32 Центральноевропейское время" или даже с датой до «21/11/2016, 16:04:32 Центральноевропейское стандартное время»? Спасибо

+0

Возможный дубликат [Swift - IOS - Даты и время в другом формате] (http://stackoverflow.com/questions/28489227/swift-ios-dates-and-times-in -Различный-формат) – xoudini

ответ

0

Временная метка в CLLocation является просто переменной Date. Вы получаете разные результаты при печати местоположения и временной метки, потому что они переведены на два разных часовых пояса.

A Date timestamp представляет собой абстрактный момент времени и не имеет системы календаря или определенного часового пояса. С другой стороны, описание CLLocation преобразует это время в ваш местный часовой пояс для лучшего уточнения. Они оба эквивалентны; одна (временная метка) показывает 15:04:32 GMT, другая показывает 16:04:32 Central European Standard Time, что равно +1 GMT без DST.

Чтобы получить местное время с меткой времени, вы можете переформатировать 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" 

Если местное время имеет решающее значение для вашей реализации, я хотел бы предложить проверку на ДСТ, а также. Вы можете проверить, как этот

if timeZone.isDaylightSavingTimeForDate((location?.timestamp)!) { 

} 
Смежные вопросы