Подтвердить что ты не робот

NSDate timeIntervalSince1970 не работает в Swift?

Я делаю это быстро:

let date = NSDate(timeIntervalSince1970: 1432233446145.0)
println("date is \(date)")

Журнал дает мне следующее:

 date is 47355-09-02 23:55:45 +0000

Затем я пытаюсь вернуть интервал только для тестирования:

let tI = expirationDate.timeIntervalSinceDate(date)
println("tI = \(tI)")

Я получаю:

tI = 0.0

Что я делаю неправильно? Кажется, я могу заставить timeIntervalSince1970 правильно работать. Есть ли какие-либо известные выпуски с этим в Swift, или я что-то пропустил здесь?

4b9b3361

Ответ 1

1432233446145 скорее всего, интервал времени в миллисекундах:

let date = NSDate(timeIntervalSince1970: 1432233446145.0/1000.0)
print("date is \(date)")
// date is 2015-05-21 18:37:26 +0000

Свифт 3 и позже:

let date = Date(timeIntervalSince1970: 1432233446145.0/1000.0)

Ответ 2

Я думаю, что ваша временная метка неверна. Это приведет к тому, что ваша дата будет 2-го сентября, 47355.

Если я использую следующее, я получаю дату (прямо сейчас):

let date = NSDate(timeIntervalSince1970: 1431024488)
println("date is \(date)")
// "date is 2015-05-07 18:48:08 +0000"

Отпечатанная дата не является локализованной меткой времени, поэтому вам придется сделать некоторую локализацию, я полагаю. Пример:

let formatter = NSDateFormatter()
formatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
println("formatted date is \(formatter.stringFromDate(date))")
// "formatted date is 07-05-2015 20:48:08"

И для полноты я также проверил с датой истечения, которая на 1100 секунд больше первоначальной date:

let expirationDate = NSDate(timeIntervalSince1970: 1431025588)
let diff = expirationDate.timeIntervalSinceDate(date)
println("expires in: \(diff)")
// "expires in: 1100.0"

Итак, timeIntervalSince1970, похоже, работает нормально, я думаю, что ваш интервал был не таким, каким вы хотели.

Ответ 3

Из вашего кода и содержимого журнала следует:

date.isEqual(expirationDate)

- > Ваш материал только что истек: -).