Re[3]: timezone
От: . Великобритания  
Дата: 10.10.12 20:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Мне и самому не все тут ясно.

А>Примерно так. При попытке вставить дату или может быть timestamp в некоторых случаях mySql валится в исключение.
А>Я поразеваю, что всем виной неверная дата или неверная дата для mySql в какой-то временной зоне.
А>Типа у меня все работает, а кое-где кое у кого возникает редкий глюк.

А>Сначала хочу воспроизвести глюк тестом.

А>из доков на mySql
А>//A timestamp. The range is '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07'
А>//UTC. TIMESTAMP values are stored as the number of seconds since the epoch ('1970-01-01 00:00:00' UTC).
А>//A TIMESTAMP cannot represent the value '1970-01-01 00:00:00' because that is equivalent to 0 seconds from
А>//the epoch and the value 0 is reserved for representing '0000-00-00 00:00:00', the “zero” TIMESTAMP value.

А>Date date = new java.util.Date(1251136551293L); по-моему в некоторых временных зонах дата уйдет в 1969 год и вставка в MySql

Ну это похоже больше на микросекунды, а не миллисекунды. Проверь тут — http://www.onlineconversion.com/unix_time.htm — выводит 41616 год. Ясен пень в 2038 не влазит.

А>должна выпадсть в экспешн. Наверно есть и други невкусные даты. Может быть в разных субд могут быть другие невалидные даты.

А>Нужен список таких дат. Составлять вручную?
Если у тебя даны миллисекунды с начала эпохи, то дата по определению валидная.

А>Хочу каким-то тестом отловить все методы где есть вставка дат в базу данных и подсунуть им некорекные даты.

А>Может быть и нужно поднимать MySql и т.д. но хотелось бы обойтись без этого.
А>Пока ищу идеи, как это правильно делать.
Надо начать с того, чтобы в точности понять что такое unix time, что такое таймзона и что такое валидная дата и что у тебя там творится в системе — где какой формат и что он значит.

А>Может бы есть способ как то проверять дату перед вставкой на валидность?

Зависит от.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.