Получить текущую дату в миллисекундах

Может ли кто-нибудь дать мне представление о том, как получить текущую дату в миллисекундах?

Ответ 1

Есть несколько способов сделать это, хотя мой личный фаворит:

CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();

Подробнее об этом методе можно узнать здесь. Вы также можете создать объект NSDate и получить время, вызвав timeIntervalSince1970, который возвращает секунд с 01.01.1970:

NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];

Cheers, Pawel

Ответ 2

Направляя NSTimeInterval прямо на длинный переполненный для меня, так что вместо этого мне пришлось бросить долго.

long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);

В результате получается 13-значная метка времени, как в Unix.

Ответ 3

NSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000);

Ответ 4

Вы можете просто сделать это:

long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);

это вернет значение в миллисекундах, поэтому, если вы умножаете полученное значение на 1000 (как было предложено моим Eimantas), вы переполнили бы длинный тип, и это приведет к отрицательному значению.

Например, если я запустил этот код прямо сейчас, это приведет к

currentTime = 1357234941

и

currentTime /seconds / minutes / hours / days = years
1357234941 / 60 / 60 / 24 / 365 = 43.037637652207

Ответ 5

extension NSDate {

    func toMillis() -> NSNumber {
        return NSNumber(longLong:Int64(timeIntervalSince1970 * 1000))
    }

    static func fromMillis(millis: NSNumber?) -> NSDate? {
        return millis.map() { number in NSDate(timeIntervalSince1970: Double(number) / 1000)}
    }

    static func currentTimeInMillis() -> NSNumber {
        return NSDate().toMillis()
    }
}

Ответ 6

@JavaZava ваше решение хорошо, но если вы хотите иметь 13-значное длинное значение, которое должно соответствовать форматированию штампа времени в Java или JavaScript (и других языках), используйте этот метод:

NSTimeInterval time = ([[NSDate date] timeIntervalSince1970]); // returned as a double
long digits = (long)time; // this is the first 10 digits
int decimalDigits = (int)(fmod(time, 1) * 1000); // this will get the 3 missing digits
long timestamp = (digits * 1000) + decimalDigits;

или (если вам нужна строка):

NSString *timestampString = [NSString stringWithFormat:@"%ld%d",digits ,decimalDigits];

Ответ 7

Cconvert NSTimeInterval milisecondedDate значение nsstring и после этого преобразуется в int.

Ответ 9

- (void)GetCurrentTimeStamp
    {
        NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
        [objDateformat setDateFormat:@"yyyy-MM-dd"];
        NSString    *strTime = [objDateformat stringFromDate:[NSDate date]];
        NSString    *strUTCTime = [self GetUTCDateTimeFromLocalTime:strTime];//You can pass your date but be carefull about your date format of NSDateFormatter.
        NSDate *objUTCDate  = [objDateformat dateFromString:strUTCTime];
        long long milliseconds = (long long)([objUTCDate timeIntervalSince1970] * 1000.0);

        NSString *strTimeStamp = [NSString stringWithFormat:@"%lld",milliseconds];
        NSLog(@"The Timestamp is = %@",strTimeStamp);
    }

 - (NSString *) GetUTCDateTimeFromLocalTime:(NSString *)IN_strLocalTime
    {
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
        NSDate  *objDate    = [dateFormatter dateFromString:IN_strLocalTime];
        [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
        NSString *strDateTime   = [dateFormatter stringFromDate:objDate];
        return strDateTime;
    }

Ответ 10

Используйте это, чтобы получить время в миллисекундах (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]).

Ответ 11

Расширение по дате, вероятно, лучший способ об этом.

extension NSDate {
    func msFromEpoch() -> Double {
        return self.timeIntervalSince1970 * 1000
    }
}