iPhone: Как узнать текущие миллисекунды? - PullRequest
208 голосов
/ 11 декабря 2008

Каков наилучший способ получить текущее системное время в миллисекундах?

Ответы [ 18 ]

4 голосов
/ 31 декабря 2015

CFAbsoluteTimeGetCurrent ()

Абсолютное время измеряется в секундах относительно абсолютной контрольной даты 1 января 2001 года 00:00:00 по Гринвичу. Положительное значение представляет дату после контрольной даты, отрицательное значение представляет дату перед ней. Например, абсолютное время -32940326 эквивалентно 16 декабря 1999 года в 17:54:34. Повторные вызовы этой функции не гарантируют монотонно увеличивающиеся результаты. Системное время может уменьшиться из-за синхронизации с внешними временными привязками или из-за явной смены часов пользователем.

4 голосов
/ 02 декабря 2015

Попробуйте это:

NSDate * timestamp = [NSDate dateWithTimeIntervalSince1970:[[NSDate date] timeIntervalSince1970]];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss.SSS"];

NSString *newDateString = [dateFormatter stringFromDate:timestamp];
timestamp = (NSDate*)newDateString;

В этом примере dateWithTimeIntervalSince1970 используется в комбинации с форматером @ "ГГГГ-ММ-дд ЧЧ: мм: сс.ССС", который будет возвращать дату с годом, месяцем, днем ​​и временем с часами, минутами, секундами и миллисекунды. Смотрите пример: «2015-12-02 04: 43: 15.008». Я использовал строку NSString, чтобы убедиться, что формат будет записан ранее.

4 голосов
/ 28 декабря 2016

Это в основном тот же ответ, что и @TristanLorach, только что перекодированный для Swift 3:

   /// Method to get Unix-style time (Java variant), i.e., time since 1970 in milliseconds. This 
   /// copied from here: http://stackoverflow.com/a/24655601/253938 and here:
   /// http://stackoverflow.com/a/7885923/253938
   /// (This should give good performance according to this: 
   ///  http://stackoverflow.com/a/12020300/253938 )
   ///
   /// Note that it is possible that multiple calls to this method and computing the difference may 
   /// occasionally give problematic results, like an apparently negative interval or a major jump 
   /// forward in time. This is because system time occasionally gets updated due to synchronization 
   /// with a time source on the network (maybe "leap second"), or user setting the clock.
   public static func currentTimeMillis() -> Int64 {
      var darwinTime : timeval = timeval(tv_sec: 0, tv_usec: 0)
      gettimeofday(&darwinTime, nil)
      return (Int64(darwinTime.tv_sec) * 1000) + Int64(darwinTime.tv_usec / 1000)
   }
2 голосов
/ 07 апреля 2018
 func currentmicrotimeTimeMillis() -> Int64{
let nowDoublevaluseis = NSDate().timeIntervalSince1970
return Int64(nowDoublevaluseis*1000)

}

1 голос
/ 13 января 2016

Это то, что я использовал для Swift

var date = NSDate()
let currentTime = Int64(date.timeIntervalSince1970 * 1000)

print("Time in milliseconds is \(currentTime)")

использовал этот сайт для проверки точности http://currentmillis.com/

0 голосов
/ 25 апреля 2019
let timeInMiliSecDate = Date()
let timeInMiliSec = Int (timeInMiliSecDate.timeIntervalSince1970 * 1000)
print(timeInMiliSec)
0 голосов
/ 05 апреля 2011

[NSDate timeIntervalSinceReferenceDate] - еще один вариант, если вы не хотите включать платформу Quartz. Возвращает двойное число, представляющее секунды.

0 голосов
/ 11 января 2018
NSTimeInterval time = ([[NSDate date] timeIntervalSince1970]); //double
long digits = (long)time; //first 10 digits        
int decimalDigits = (int)(fmod(time, 1) * 1000); //3 missing digits
/*** long ***/
long timestamp = (digits * 1000) + decimalDigits;
/*** string ***/
NSString *timestampString = [NSString stringWithFormat:@"%ld%03d",digits ,decimalDigits];
...