Отримайте Unix Epoch Time в Swift


102

Як ви отримуєте секунди від епохи в Swift?


2
Те саме, що і в Objective-C - використовуйте NSDate.
gnasher729

2
Я уникав розробляти продукти Apple, тому що ненавиджу Objective-C. Отже, я цього не дізнався. І я знаю, що синтаксис Swift принаймні дещо відрізняється. Просто покажіть мені синтаксис. Завоюйте собі легку репутацію ТА.
Кріс Редфорд


3
Ні, вона пов'язує безпосередньо до входу для методу Swift: - timeIntervalSince1970.
zaph

3
Насправді я пов’язаний із конкретним методом :)
Martin R

Відповіді:


162

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

let timeInterval = NSDate().timeIntervalSince1970

7
Зауважте, що для імпортування Фонду потрібно.
AlBlue

3
як без використання Foundation?
marius

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 р. За UTC.
Martin R

1
Він повертає TimeInterval , який знаходиться в секоді
Даніель

1

Ви можете отримати це за допомогою наступного

Int(Date().timeIntervalSince1970)

Це для поточної дати, якщо ви хочете отримати для даної дати

Int(myDate.timeIntervalSince1970)

Якщо ви хочете перетворити назад з епохи UNIX у часовий час Swift, ви можете скористатися наступним

let date = Date(timeIntervalSince1970: unixtEpochTime)

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

Свіфт 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

Чи знаєте ви, коли речі можуть побачитись, і друзі стануть кросплатформою?
Золтан Матук

@ ZoltánMatók Я чув, що вони планують реалізувати більшу кількість Фонду під відкритим небом. Погляньте на forums.swift.org для отримання додаткової інформації.
ршев
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.