Получите Unix Epoch Time в Swift


102

Как получить секунды эпохи в Swift?


2
То же, что и в Objective-C - используйте NSDate.
gnasher729 02

2
Я избегал разработки продуктов Apple, потому что ненавижу Objective-C. Следовательно, я этого не узнал. И я знаю, что синтаксис Swift хоть немного отличается. Просто покажи мне синтаксис. Получите себе легкую репутацию SO.
Крис Редфорд


3
Нет, она связывает непосредственно к входу для метода Swift: - timeIntervalSince1970.
zaph 02

3
На самом деле я связался с конкретным методом :)
Martin R

Ответы:


162

Вы можете просто использовать timeIntervalSince1970функцию NSDate .

let timeInterval = NSDate().timeIntervalSince1970

7
Обратите внимание, что для этого необходимо импортировать Foundation.
AlBlue 02

3
как насчет без использования Foundation?
Мариус

3
Если вы не хотите использовать фундамент, вы можете использовать AFNetworking / AlamoFire ( github.com/Alamofire/Alamofire ) для загрузки currentmillis.com, а затем проанализировать html страницы. Обратите внимание, что вы должны учитывать задержки в сети и проверять подключение. Я решил просто использовать Foundation ...
Чейз Робертс

2
Как насчет int?
rstackhouse

82

Для Swift 3.0

Date().timeIntervalSince1970

2
Хороший. Кроме того, людей может заинтересовать stackoverflow.com/questions/39811352/swift-3-date-vs-nsdate
Мэтт Джонсон-

49
Формат времени UNIX - миллисекунды. So Int (Date (). TimeIntervalSince1970 * 1000)
CHiP-love-NY

9
@ CHiP-love-NY: Это неправда. Время Unix - это количество секунд с 1 января 1970 г. по всемирному координированному времени.
Martin R

1
Он возвращает TimeInterval , который находится в секундах
Даниэль

1

Вы можете получить это, используя следующие

Int(Date().timeIntervalSince1970)

Это на текущую дату, если вы хотите получить на данную дату

Int(myDate.timeIntervalSince1970)

Если вы хотите преобразовать обратно из эпохи времени UNIX в время Swift Date, вы можете использовать следующие

let date = Date(timeIntervalSince1970: unixtEpochTime)

0
1 second      = -
1 millisecond = 1,000 seconds
1 microsecond = 1,000,000 seconds

Swift timeIntervalSince1970возвращает секунды с тем, что задокументировано как «субмиллисекундная» точность, которая, как я заметил, обычно означает микросекунды, но иногда одна шкала (одна цифра справа от десятичной дроби) меньше или больше. Когда он возвращает шкалу 5 (5 цифр после десятичной дроби), я не знаю, отбрасывает ли Swift конечный 0 или он не может дать 6 шкал точности. Но когда он возвращает шкалу 7, эта дополнительная цифра может быть усечена, потому что ее точность превышает микросекундную точность. Следовательно, для согласованных и точных значений:

let preciseSeconds = Int(Date().timeIntervalSince1970)
let preciseMilliseconds = Int(Date().timeIntervalSince1970 * 1_000)
let preciseMicroseconds = Int(Date().timeIntervalSince1970 * 1_000_000) // most likely precise

К сожалению, однако, в 2038 году 32-битные числа не будут использоваться для временной метки Unix, и они должны быть 64-битными.

let seconds = Date().timeIntervalSince1970
let milliseconds = Date().timeIntervalSince1970 * 1_000
let microseconds = Date().timeIntervalSince1970 * 1_000_000

Расширение:

extension Date {
    var unixTimestamp: Int64 {
        return Int64(self.timeIntervalSince1970 * 1_000)
    }
}

Date().unixTimestamp

0

Если вы не хотите импортировать Foundation, то есть для использования в Linux и т.д., вы можете использовать следующее из CoreFoundation:

import CoreFoundation

let timestamp = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970

Вы знаете, когда Date and Friends станет кроссплатформенным?
Золтан Маток,

@ ZoltánMatók Я слышал, что у них есть планы по открытому обновлению Foundation. Взгляните на forum.swift.org для получения дополнительной информации.
rshev
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.