Как мне вычислить, как целое число, количество миллисекунд между настоящим моментом и предыдущим моментом, когда я помнил, что сейчас?
Есть ли причина, по которой вам это нужно как целое число миллисекунд? Запрашивая у NSDate интервал времени с другой даты, вы получите число секунд с плавающей запятой. Если вам действительно нужны миллисекунды, вы можете просто умножить их на 1000, чтобы получить число миллисекунд с плавающей запятой. Если вам действительно нужно целое число, вы можете округлить или усечь значение с плавающей запятой.
Если вы хотите сделать это с целыми числами от начала до конца, используйте либо UpTime
, либо mach_absolute_time
, чтобы получить текущее время в абсолютных единицах, а затем используйте AbsoluteToNanoseconds
, чтобы преобразовать его в реальные единицы. Очевидно, вам придется разделить это на 1 000 000, чтобы получить миллисекунды.
QA1398 предлагает mach_absolute_time
, но UpTime
проще, поскольку возвращает тот же тип, который использует AbsoluteToNanoseconds
(никаких «удовольствий с указателем», как показано в технической заметке).
AbsoluteToNanoseconds
возвращает UnsignedWide
, который является структурой. (Этот материал восходит к тому времени, когда машины Mac не могли обрабатывать скалярные 64-битные значения.) Используйте функцию UnsignedWideToUInt64
, чтобы преобразовать его в скаляр. Остается только вычитание, которое вы сделаете обычным способом.
person
Peter Hosey
schedule
12.12.2009