Как использовать time > 2038 год в официальном Windows Python 2.5

StackOverflow https://stackoverflow.com/questions/839755

Вопрос

Официальный Python 2.5 для Windows был собран с помощью Visual Studio.Net 2003, который использует 32-разрядный time_t.Поэтому, когда год > 2038, это просто дает исключения.

Хотя это исправлено в Python 2.6 (который изменил time_t на 64-разрядный с VS2008), я бы хотел использовать 2.5, потому что многие модули уже скомпилированы для него.

Итак, вот мой вопрос - есть ли какое-либо решение, позволяющее моей программе легко обрабатывать год> 2038 и по-прежнему использовать официальный Python 2.5?Например, некоторые готовые библиотеки, такие как "time64" или "давний" и т.д...

Пожалуйста, не советуйте мне обновляться до версии 2.6+ или забыть об ошибке - у меня есть свои причины заставить ее работать, вот почему я размещаю вопрос здесь.

Это было полезно?

Решение 3

Лучшее решение, которое я нашел, - это получить исходную копию Python 2.5 и повторно скомпилировать модуль времени с компиляторами, которые по умолчанию используют time_t до 64 бит, например VS2005 или VS2008 (может также настроить среду выполнения C для предотвращения параллельная проблема).

Другие советы

Модуль datetime в стандартной библиотеке должен нормально работать. Что вам нужно из модуля time , который datetime не предлагает?

Я не хочу показаться банальным, но почему бы и нет:

  • забудьте об ошибке Y2038 в Python 2.5
  • обновитесь до Python 2.6 в какой-то момент в будущем, до 2038 года

Редактировать: Чтобы прояснить:(и я серьезно — я не хотел подшучивать)

Предположительно, вы можете обновить Python до версии 2.6 (или более поздней) в какой-то неопределенный промежуток времени между настоящим моментом и 2038 годом.Может быть, в 2012 году.Может быть, в 2015 году.Может быть, в 2037 году.

Если вы знаете о различиях между переменной timestamp Python в вашем приложении (я не очень разбираюсь в Python), похоже, что это были бы важные аспекты, которые следует учитывать:

  • какие данные сохраняются постоянно
  • как сохраненная переменная временной метки Python 2.5 восстанавливается с использованием Python 2.6 (предположительно, это "сделает все правильно")
  • будут ли старые данные храниться в их постоянной форме достаточно долго, чтобы возникла двусмысленность (напримергод "96" однозначен, если рассматривать период с 1950 по 2049 год, но если эти данные хранятся примерно до 2230 года, то "96" может быть 1996, 2096 или 2196 годом)

Если ответы будут благоприятными, просто используйте обычную временную метку с ошибкой 2038 года.Вам нужно будет сравнить это с объемом редизайна / рефакторинга, который вам пришлось бы выполнить, чтобы ваше приложение работало с альтернативной временной меткой (напримерстрока временной метки базы данных или что-то еще).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top