metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-02-16 12:54 am

Ох, какой ад

в Java c датой и временем.
Конкретно, чтобы на Clojure засунуть в jdbc параметр дату, пришлось перерыть весь гугл, исходники jaybird (firebird jdbc драйвера), внутренности joda-time и ее кложурной обертки clj-time

http://www.paullegato.com/blog/clojure-joda-sql-date-time/

(defn to-sql-date [date]
"Convert any Joda-readable date object (including a string) to a java.sql.Date"
(java.sql.Date. (.. (LocalDate. date) toDateMidnight toInstant getMillis)))

Основной затык - только в org.joda.time.LocalDate нормально сделана дата, без времени и временных зон. А jdbc драйвер понимает только java.sql.Date и вроде еще пару вариаций на тему "эпоха в long"

[identity profile] slonopotamus.livejournal.com 2012-02-16 06:50 pm (UTC)(link)
Да есть в базе тип "дата". И называется он, как это ни странно, date.

[identity profile] metaclass.livejournal.com 2012-02-16 07:01 pm (UTC)(link)
А в жабе java.util.Date - внезапно, содержит время, равное полночи, и таймзону.

[identity profile] slonopotamus.livejournal.com 2012-02-16 07:04 pm (UTC)(link)
java.util.Date (как и java.util.Calendar) - феерический пиздец, который починен только в joda-time. Однако посыл тред-стартера (не путать с топик-стартером) был в том, что в sql нет типа "дата".

[identity profile] sergiej.livejournal.com 2012-02-16 07:22 pm (UTC)(link)
Посыл в том что нет стандарта, позволяющая эту дату переделывать однозначно в жавовскую дату, и нужно тягать ещё дополнительную информацию, или забить, и читать её в стринг.