Здравствуйте, Аноним, Вы писали:
А>Мне и самому не все тут ясно.
А>Примерно так. При попытке вставить дату или может быть 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, что такое таймзона и что такое валидная дата и что у тебя там творится в системе — где какой формат и что он значит.
А>Может бы есть способ как то проверять дату перед вставкой на валидность?
Зависит от.