#java #c #c #time
#java #c #c #время
Вопрос:
В некоторых языках время хранится как количество секунд от эпохи и хранится в int (поправьте меня, если я ошибаюсь). Таким образом, мы в конечном итоге достигнем точки, когда мы не сможем сохранить текущее время в int, потому что не будет достаточно битов для хранения времени.
Теперь я знаю, что это в будущем, но все же, не стоит ли подумать об этом сейчас?
В любом случае, мой реальный вопрос заключается в том, должен ли я всегда использовать 64 бита для хранения времени или об этом может позаботиться операционная система?
Комментарии:
1. Это иногда называют проблемой 2038 , когда речь идет о времени Unix.
2. @amit: на самом деле это больше xkcd.com/607 (также: xkcd.com/376 ) 🙂
3. Вы могли бы изменить разрешение на минуты и иметь более широкий диапазон.
Ответ №1:
Ваше беспокойство справедливо, если вы хотите иметь дело с датами в достаточно отдаленном будущем. С 32-разрядным целым числом без знака вы можете хранить до 2 ^ 32 секунд, что составляет немногим более 136 лет.
Чтобы ответить на ваш вопрос, следует ли использовать 64 или 32 бита для хранения количества секунд, зависит от потребностей вашего приложения. Если вы хотите сохранить встречи в календаре для обычного приложения, вероятно, достаточно 32 бит. С другой стороны, если вы создаете машину времени, использование 64 может быть более безопасным выбором.
На самом деле это хорошо известная проблема, похожая на проблему Y2K. Смотрите http://en.wikipedia.org/wiki/Year_2038_problem для получения дополнительной информации.
Комментарии:
1. 64 бит будет недостаточно для приличной машины времени, вам понадобится 512 бит, если вы хотите показать пальцем на тепловую смерть вселенной.
2. Что ж, вы могли бы перенестись на 5e11 лет в будущее с базовой 64-разрядной машиной времени и купить там машину времени получше. К тому времени цены, вероятно, совсем немного упадут.
3. Я только начал делать это с моей 1-разрядной машиной времени. Не буду врать, я думаю, что это займет некоторое время.
4. — Или — вы могли бы использовать плавающую точку, в конце концов, когда вы прыгаете так далеко во времени, вы действительно не заботитесь о точности. 🙂
Ответ №2:
Современные языки используют длинный тип данных (например, java и .net) для хранения времени в миллисекундах.
Комментарии:
1. И в C вы должны использовать time_t, который равен 64 битам в современных системах, даже в 32-разрядной ОС. Однако во встроенном ваш пробег может отличаться.
Ответ №3:
Некоторые платформы / языки программирования столкнутся с проблемами, когда количество секунд из эпохи (1970-01-01 00:00 GMT) больше не укладывается в 32-разрядное целое число. Это относится не ко всем платформам и не ко всем языкам программирования.
Если вы используете 64-разрядные целые числа для подсчета секунд, вы в безопасности еще много-много лет. Кроме того, если вы используете эти 64 бита для подсчета миллисекунд, вы все еще в порядке в течение очень долгого времени. Я бы вообще не ожидал никаких проблем, поскольку вы в безопасности, даже если вам нужно девять цифр, чтобы записать только год.
Комментарии:
1. Использование миллисекунд довольно устарело. В наши дни наносекунды являются стандартной единицей измерения времени в субсекунду…