Lua формат даты и сравнение - PullRequest
2 голосов
/ 05 марта 2012

Как вы сравниваете даты с Луа?Какой формат строки лучше подходит для дат?Должен ли я хранить даты в эпоху?Я ищу производительность ...

Это лучший способ os.difftime?

1 Ответ

11 голосов
/ 05 марта 2012

Вы спрашиваете несколько вещей, поэтому вот мои ответы:

Должен ли я хранить даты в эпоху?

В общем, да, лучший способ сохранить даты - использовать эпохи, возвращаемые os.time

Как вы сравниваетедаты с lua?

Это зависит от того, как вы хотите «сравнить» их.

Если вы просто хотите узнать, какой из них старше / старше, то самая быстрая самая быстрая вещьсохраняя их как "эпохи" и затем делая date1 < date2;поскольку обе даты являются просто числами, они являются и производительными, и чистыми.

Если вы хотите узнать, сколько месяцев / дней / лет прошло между двумя указанными датами, это немного сложнее.Вам понадобится код, подобный следующему:

diff = os.date("*t", os.difftime(date1, date2))

В этом примере возвращаемая diff является таблицей, аналогичной {year=1, month=5, day=1, hour=2, min=3, sec=40 ...}

Я ищу производительность...

Если вы слишком часто используете os.date() для преобразования эпох в даты (например, для печати), то вам может потребоваться «кэшировать» информацию о году, месяце и т. Д. В таблицетак что вам не придется звонить снова и снова.Но делайте это, только если у вас плохая работа; без предварительной оптимизации .

Какой формат строки подходит для дат?

Это полностью зависит от того, как вы хотите их использовать,Например, если ваше приложение взаимодействует с другой службой, которая ожидает определенный формат даты, имеет смысл использовать этот формат во всех ваших приложениях.

Если у вас нет особой необходимости использовать формат, тогда один кандидат(%x):

os.date("%x", date) -- 09/16/1998 (for example)

Строка, которую вы получите, зависит от локали компьютера.Это может быть или не быть желательным.

Если вы хотите, чтобы представление было одинаковым на всех компьютерах, независимо от их локали, вы можете попробовать использовать стандартный формат, например ISO 8601 :

os.date("%Y-%m-%d", date) -- returns "1998-09-16" in all computers

Этот формат имеет много преимуществ;наиболее очевидным является то, что даты, отсортированные в алфавитном порядке, также отсортированы в хронологическом порядке.Но самое важное то, что многие программы готовы их прочитать / использовать.

Более подробную информацию о датах можно найти в Программирование в Lua, Раздел 22.1 - Дата и время и в lua-users wiki .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...