Как получить 18-значную текущую временную метку в Swift?

Я хочу получить текущую временную метку следующим образом:

636110767775716756​

Однако, когда я это делаю:

NSDate().timeIntervalSince1970

Он возвращает значение, подобное этому:

1475491615.71278

Как мне получить доступ к тикам текущей отметки времени в формате, который я хочу? Я проверяю даты отсюда:

Ответы

Ответ 1

Кажется, вы ищете, что DateTime.Ticks находится в С#, то есть время с 0001-01-01, измеренное в 100-наносекундных интервалах.

Код из предоставленной ссылки Swift: конвертировать NSDate в С# ticks можно легко перевести в Swift:

// Swift 2:
extension NSDate {
    var ticks: UInt64 {
        return UInt64((self.timeIntervalSince1970 + 62_135_596_800) * 10_000_000)
    }
}

// Swift 3:
extension Date {
    var ticks: UInt64 {
        return UInt64((self.timeIntervalSince1970 + 62_135_596_800) * 10_000_000)
    }
}

Пример (Swift 3):

let ticks = Date().ticks
print(ticks) // 636110903202288256

или как строка:

let sticks = String(Date().ticks)
print(sticks)

И хотя они есть, обратное преобразование из тиков в Date было бы

// Swift 2:
extension NSDate {
    convenience init(ticks: UInt64) {
        self.init(timeIntervalSince1970: Double(ticks)/10_000_000 - 62_135_596_800)
    }
}

// Swift 3:
extension Date {
    init(ticks: UInt64) {
        self.init(timeIntervalSince1970: Double(ticks)/10_000_000 - 62_135_596_800)
    }
}

Пример (Swift 3):

let date = Date(ticks: 636110903202288256)

Ответ 2

Вот решение, которое я нахожу очень элегантным. Я расширил NSDate (хотя теперь он просто сейчас в Swift 3) включает функцию toMillis(), которая даст вам значение Int64 объекта даты, с которым вы работаете.

extension Date {
    func toMillis() -> Int64! {
        return Int64(self.timeIntervalSince1970 * 1000)
    }
}

Применение:

let currentTimeStamp = Date().toMillis()

ура

Ответ 3

В Свифт:

если вы хотите использовать глобальную переменную, см. ниже код:

var Timestamp: String {
   return "\(NSDate().timeIntervalSince1970 * 1000)"
}

Тогда вы можете назвать это

println("Timestamp: \(Timestamp)")

* 1000 для miliseconds, если вы предпочитаете, вы можете удалить это. Если сохранить его как NSTimeInterval.

var Timestamp: NSTimeInterval {
    return NSDate().timeIntervalSince1970 * 1000
}

В Objective C:

Если вы хотите объявить как символическую константу, см. Ниже код:

#define TimeStamp [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000]

Затем назовите его так:

NSString * timestamp = TimeStamp;

Или создать глобальный метод:

- (NSString *) timeStamp {
    return [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000];
}

Имейте Примечание: 1000 - это преобразовать метку времени в миллисекунды. Вы можете удалить это, если вы предпочитаете свое времяInterval в секундах.