2016-10-31 3 views
0

У меня есть double значение timestamp 1477933200000.0 от JSON, и я хочу конвертировать в NSDate, затем string. Это то, что я сделал,Преобразование метки времени в NSDate

let dateNow = NSDate(timeIntervalSinceNow: timestampDouble) 
let date1970 = NSDate(timeIntervalSince1970: timestampDouble) 
let dateRef = NSDate(timeIntervalSinceReferenceDate: timestampDouble) 

let dateFormatter = NSDateFormatter() 
// dateFormatter.dateFormat = "MM/dd/YYYY HH:MM:ss a" 
dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle 
dateFormatter.timeStyle = NSDateFormatterStyle.MediumStyle 

let convDateNow = dateFormatter.stringFromDate(dateNow) 
print("Date Now: \(convDateNow)") 

let convDate1970 = dateFormatter.stringFromDate(date1970) 
print("Date Now: \(convDate1970)") 

let convRefDate = dateFormatter.stringFromDate(dateRef) 
print("Date Now: \(convRefDate)") 

Я попытался преобразовать его в http://www.epochconverter.com, и он показал мне правильную дату. Но все три типа (timeIntervalSinceNow, timeIntervalSince1970 и timeIntervalSinceReferenceDate) странны. Это результат этого типа соответственно.

Date Now: September 2, 48850 at 5:50:04 PM 
Date Now: November 3, 48803 at 3:00:00 PM 
Date Now: November 3, 48834 at 3:00:00 PM 

Так что же я делаю неправильно здесь? Я просто хочу получить разницу между датой сейчас и датой с json (timestamp).

Любая помощь была бы действительно оценена. Спасибо!

ответ

1

Обратите внимание, что при использовании epochconverter.com появляется сообщение «Предполагая, что эта временная метка находится в миллисекундах».

Теперь попробуйте удалить три конечных нуля (слева от десятичной). Теперь предполагается, что вы имеете дело с секундами, и он даст вам ту же дату & времени.

В iOS, NSTimeInterval (или TimeInterval в Swift) действительно typedef'd как двойной (или двойной), но он интерпретируется как секунды (с точностью до миллисекунды). Поэтому различные перегрузки конструктора NSDate() ожидают, что параметр будет выражен в секундах.

Поэтому вам может понадобиться разделить эту метку времени на 1000 для преобразования от миллисекунд до секунд.

+0

Большое вам спасибо. Я разделился с 1000 и использовал 'timeIntervalSince1970', и он работает. –