Вы можете узнать больше об этом методе здесь . Вы также можете создать объект NSDate и получить время, вызвав timeIntervalSince1970, который возвращает секунды с 01.01.1970:
Я пытаюсь использовать следующий код NSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000); NSLog (@ "didReceiveResponse ----% d", milisecondedDate);
siva
2
Проблема в заявлении NSLog. NSTimeInterval - это тип double. Таким образом, вы должны использовать% f вместо% d.
Павел
55
[[NSDate date] timeIntervalSince1970] возвращает NSTimeInterval, который представляет собой продолжительность в секундах, а не в миллисекундах.
Эрик ван дер Нейт
12
Обратите внимание, что CFAbsoluteTimeGetCurrent()возвращает время относительно контрольной даты Jan 1 2001 00:00:00 GMT. Не то чтобы справочная дата была указана в вопросе, но имейте в виду, что это не метка времени UNIX.
nyi
2
[[NSDate date] timeIntervalSince1970] возвращает время в секундах, а не в миллисекундах.
SAPLogix
61
Приведение NSTimeInterval непосредственно к long переполнено для меня, поэтому вместо этого мне пришлось выполнить приведение к long long.
Это не вернет фактические миллисекунды, потому что timeIntervalSince1970 возвращает интервал в секундах, поэтому у нас не будет желаемой точности в миллисекундах.
Danpe
9
timeIntervalSince1970 Метод делает возвращение в секундах на целое число, однако это , doubleчто также включает в себя вторую фракционную , а также которые могут быть арифметически преобразованы в миллисекундах. Следовательно, умножение на 1000.
wileymab
@wileymap Ага, ты прав. Я понял это позже
Данпе
2
long long? этот язык такой странный
user924 06
@ user924 Не могу с этим согласиться. Вот почему я перестал это писать. ;)
Я пытаюсь использовать следующий код NSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000); NSLog (@ "didReceiveResponse ----% d", milisecondedDate); - но он показывает значение в отрицательном Вале - как ResponseTime ---- 556610175 ResponseTime ---- -1548754395
Шив
1
попробуйте использовать заполнитель% f вместо% d. Если это не поможет - уберите умножение на 1000
Эймантас
@ Eimantas, когда я пытаюсь использовать% f ... Я получаю время, как следует из времени отклика = 1306494959011.239014 Время отклика = 1306494910724.744141 Если это мс, то указанное выше время больше часа.
siva
Текущая дата - это временной интервал в секундах с 1970 года. Вы ничего не упомянули о контрольной дате.
long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);
это вернет значение в миллисекундах, поэтому, если вы умножите полученное значение на 1000 (как предлагал мой Eimantas), вы переполните длинный тип, и это приведет к отрицательному значению.
Например, если я запустил этот код прямо сейчас, это приведет к
@JavaZava, ваше решение хорошее, но если вы хотите иметь 13-значное значение, соответствующее форматированию метки времени в Java или JavaScript (и других языках), используйте этот метод:
NSTimeInterval time = ([[NSDate date] timeIntervalSince1970]); // returned as a doublelong digits = (long)time; // this is the first 10 digitsint decimalDigits = (int)(fmod(time, 1) * 1000); // this will get the 3 missing digitslong timestamp = (digits * 1000) + decimalDigits;
NSString * timestampString = [NSString stringWithFormat: @ "% ld% 03d", digits, decimalDigits]; на самом деле правильно. В вашем случае, если значение decimalDigits меньше 100, будет получен неправильный результат.
ПАНКАЙ ВЕРМА
4
Как упоминалось ранее,
[[NSDate date] timeIntervalSince1970] возвращает NSTimeInterval, который представляет собой продолжительность в секундах, а не в миллисекундах.
Вы можете посетить https://currentmillis.com/, чтобы узнать, как вы можете говорить на желаемом языке. Вот список -
Ответы:
Есть несколько способов сделать это, хотя мне больше всего нравится:
CFAbsoluteTime timeInSeconds = CFAbsoluteTimeGetCurrent();
Вы можете узнать больше об этом методе здесь . Вы также можете создать объект NSDate и получить время, вызвав timeIntervalSince1970, который возвращает секунды с 01.01.1970:
NSTimeInterval timeInSeconds = [[NSDate date] timeIntervalSince1970];
А в Swift:
источник
CFAbsoluteTimeGetCurrent()
возвращает время относительно контрольной датыJan 1 2001 00:00:00 GMT
. Не то чтобы справочная дата была указана в вопросе, но имейте в виду, что это не метка времени UNIX.Приведение NSTimeInterval непосредственно к long переполнено для меня, поэтому вместо этого мне пришлось выполнить приведение к long long.
long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0);
В результате получается 13-значная временная метка, как в Unix.
источник
timeIntervalSince1970
Метод делает возвращение в секундах на целое число, однако это ,double
что также включает в себя вторую фракционную , а также которые могут быть арифметически преобразованы в миллисекундах. Следовательно, умножение на 1000.long long
? этот язык такой странныйNSTimeInterval milisecondedDate = ([[NSDate date] timeIntervalSince1970] * 1000);
источник
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() } }
источник
Вы можете просто сделать это:
long currentTime = (long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970]);
это вернет значение в миллисекундах, поэтому, если вы умножите полученное значение на 1000 (как предлагал мой Eimantas), вы переполните длинный тип, и это приведет к отрицательному значению.
Например, если я запустил этот код прямо сейчас, это приведет к
currentTime = 1357234941
а также
currentTime /seconds / minutes / hours / days = years 1357234941 / 60 / 60 / 24 / 365 = 43.037637652207
источник
@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];
источник
Как упоминалось ранее, [[NSDate date] timeIntervalSince1970] возвращает NSTimeInterval, который представляет собой продолжительность в секундах, а не в миллисекундах.
Вы можете посетить https://currentmillis.com/, чтобы узнать, как вы можете говорить на желаемом языке. Вот список -
ActionScript (new Date()).time C++ std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count() C#.NET DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() Clojure (System/currentTimeMillis) Excel / Google Sheets* = (NOW() - CELL_WITH_TIMEZONE_OFFSET_IN_HOURS/24 - DATE(1970,1,1)) * 86400000 Go / Golang time.Now().UnixNano() / 1000000 Hive* unix_timestamp() * 1000 Java / Groovy / Kotlin System.currentTimeMillis() Javascript new Date().getTime() MySQL* UNIX_TIMESTAMP() * 1000 Objective-C (long long)([[NSDate date] timeIntervalSince1970] * 1000.0) OCaml (1000.0 *. Unix.gettimeofday ()) Oracle PL/SQL* SELECT (SYSDATE - TO_DATE('01-01-1970 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) * 24 * 60 * 60 * 1000 FROM DUAL Perl use Time::HiRes qw(gettimeofday); print gettimeofday; PHP round(microtime(true) * 1000) PostgreSQL extract(epoch FROM now()) * 1000 Python int(round(time.time() * 1000)) Qt QDateTime::currentMSecsSinceEpoch() R* as.numeric(Sys.time()) * 1000 Ruby (Time.now.to_f * 1000).floor Scala val timestamp: Long = System.currentTimeMillis SQL Server DATEDIFF(ms, '1970-01-01 00:00:00', GETUTCDATE()) SQLite* STRFTIME('%s', 'now') * 1000 Swift* let currentTime = NSDate().timeIntervalSince1970 * 1000 VBScript / ASP offsetInMillis = 60000 * GetTimeZoneOffset() WScript.Echo DateDiff("s", "01/01/1970 00:00:00", Now()) * 1000 - offsetInMillis + Timer * 1000 mod 1000
Для цели C я сделал что-то вроде ниже, чтобы распечатать его -
long long mills = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0); NSLog(@"Current date %lld", mills);
Hopw это помогает.
источник
C преобразовать
NSTimeInterval
milisecondedDate
значение вnsstring
и после этого преобразовать вint
.источник
Вы можете использовать следующие методы, чтобы получить текущую дату в миллисекундах.
[[NSDate date] timeIntervalSince1970];
ИЛИ
double CurrentTime = CACurrentMediaTime();
Источник: iPhone: Как узнать текущие миллисекунды?
источник
- (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; }
источник
Используйте это, чтобы получить время в миллисекундах
(long)(NSTimeInterval)([[NSDate date] timeIntervalSince1970])
.источник
Продление срока, вероятно, лучший способ об этом.
extension NSDate { func msFromEpoch() -> Double { return self.timeIntervalSince1970 * 1000 } }
источник