На каких языках хорошо работают дата, время и календарь? - PullRequest
9 голосов
/ 18 сентября 2008

Вероятно, это слишком много, чтобы спросить, но есть ли какой-нибудь язык, который делает действительно потрясающую работу по представлению операций времени и даты? Сразу признаюсь, что действительно трудно написать действительно великолепную библиотеку времени. Тем не менее, есть ли распространенные языки, которые есть? По сути, я хочу что-то, что обрабатывает время и дату так же полно, как современные библиотеки регулярных выражений выполняют свою работу. Все, что я видел до сих пор в Python и Java, пропускает одну или несколько довольно важных частей или усложняет слишком много вещей.

По крайней мере, это должно быть интуитивно понятно:

  • найти количество дней между двумя указанными датами, количество минут между двумя заданными минутными периодами и т. Д.
  • сложение и вычитание интервалов из отметок времени
  • позволяет простое преобразование между часовыми поясами, при этом автоматически учитывается изменение летнего времени по регионам (учитывая, что имеется точная база данных с региональными настройками)
  • получить период, к которому относится данная временная метка, с учетом детализации периода («в каком календарном дне находится эта дата?»)
  • поддержка очень общих преобразований строки в дату (с учетом шаблона)

Далее, если есть настройка Calendar / GregorianCalendar в стиле Java, общий класс Calendar должен быть приспособлен к подклассам, если мне нужно свернуть свой собственный иврит, вавилонский, толкинский или MartianCalendar. (Java-календари делают это бессмысленно, например.)

Я полностью не зависим от языка. Хорошо, если эта штука захлебнется неоднозначными вещами типа «сколько минут осталось между 2002 и следующим Днем Святого Валентина?»

Ответы [ 15 ]

1 голос
/ 01 января 2009

Библиотека Perl DateTime, без сомнения, лучшая (как и в большинстве других) библиотека для обработки математики даты и времени и часовых поясов Все остальное неправильно в той или иной степени. (и я говорю это, написав упомянутое выше сообщение в блоге в библиотеках PHP DateTime / DateTimeZone)

1 голос
/ 18 сентября 2008

Я был очень доволен классом PEAR Date для PHP. Я думаю, он выполняет все, о чем вы спрашиваете, за исключением нескольких календарей, хотя есть и Date_Human, который может быть шаблоном для такого рода вещей.

Кроме того, я еще не работал с ним, но Zend_Date , также для PHP, похоже, будет работать хорошо для большинства того, что вы хотите. Преимущество Zend_Date заключается в том, что он основан на временных метках Unix и на том факте, что большая часть классов Zend Framework предназначена для легкого расширения. Поэтому, скорее всего, вы могли бы быстро добавить поддержку для других систем дат, расширив Zend_Date.

1 голос
/ 18 сентября 2008

Я согласен, что Java SDK имеет ужасную реализацию библиотеки datetime. Надеюсь, JSR 310 исправит эту проблему в Java 7. Если вы не можете дождаться Java 7, я бы порекомендовал предшественник JSR-310, Joda Time.

Я согласен, что реализация Ruby on Rails в ActiveSupport - отличная реализация, которая правильно понимает основы.

1 голос
/ 18 сентября 2008

Моим личным фаворитом был бы Ruby с ActiveSupport Rails.

start_time = 5.months_ago.at_end_of_week 
end_time =  6.months.since(start_time)

Он поддерживает все функции, которые вы упомянули выше, с аналогичным DSL (язык, специфичный для домена)

0 голосов
/ 18 сентября 2008

Ruby имеет отличную поддержку, на самом деле. Проверьте эту страницу . Действительно отличная поддержка для превращения строк в даты, дат в строки, выполнения математических операций с датами, анализа строк «на естественном языке», таких как «3 месяца назад в пятницу в 15:45», в реальную дату, превращение дат в строки, чтобы вы могли что-то делать как "Сэм последний раз заходил на сайт 4 дня назад" или как там ...

Очень изящный.

...