2013-11-11 5 views
1

Мы пытаемся сравнить дату, хранящуюся в mySQL, с полем текстового поля, прочитанным из оригинала сообщения Gmail, с использованием сопоставления дат java.Изменяется ли изменение времени на функцию сравнения дат Java?

Простой текст сообщения Gmail. Дата считывается и сохраняется в поле базы данных mySQL типа «date_sent» TIMESTAMP. В следующий раз, когда это сообщение проверено, оно получает сообщение plain text Date и, используя функцию сравнения дат Java, сравнивает это с сохраненным значением date_sent.

Это сравнение обычно работает. Однако - если дата и время сообщения Дата, которую вы сравниваете, находится в течение 1 часа в день, когда время изменилось (переход на летнее время на стандарт), сравнение не удалось.

Кто-нибудь испытал это? как вы смогли это исправить?

ответ

1

Я никогда не испытывал этого, потому что я никогда этого не делал. Я думаю, вам нужно будет узнать/узнать временную зону текстовой даты, преобразовать ее в объект Date (используя этот часовой пояс), а затем сравнить даты таким образом.

Вы говорите, что используете метод сравнения Date, но он требует ввода Date. Так вы уже конвертируете? Пожалуйста, покажите нам этот код. Вы проходите в часовом поясе?

Also, this question has very useful information that you can use.

+0

Спасибо за информацию, это хорошо рассмотреть. Сначала мы будем искать текст, сравнивающий маршрут, и посмотрим, как это происходит! – Linda

2

Похоже, что у вас есть тяжелая битва. Если приходит сообщение, датированное 1:30 утра, в день, когда закончится переход на летнее время, я не думаю, что вы можете сказать, является ли это ПЕРВЫМ появлением 1:30 утра (до того, как часы вернутся) или SECOND.

Предположительно, вы никогда не получите сообщение от 1:30 утра о дате перехода на летнее время, потому что этого времени на самом деле не существует.

Итак, если вы сделаете это, преобразовывая текстовое поле в дату и сохраняя его, у вас всегда будет проблема сравнения таких дат. Если вы ошиблись в 1:30 утра, ваше сравнение может быть неправильным, и я не думаю, что вы можете сделать это слишком много, если вы хотите, чтобы ваши часовые пояса были правильными, как для летнего времени, так и для стандартного времени.

Одна вещь, которую вы можете рассмотреть, заключается в том, чтобы хранить метки времени как текст, а не как даты, чтобы преобразование никогда не происходило. Если вы используете формат, например yyyy-MM-dd HH:mm:ss, тогда вы сможете сделать сравнение текста вместо сравнения даты и получить правильные результаты.

+0

Спасибо, Дэвид, приятно слышать те же мысли от кого-то еще! Мы начали обсуждать идею перехода на сохранение текста и сравнения, но надеялись, что нам удастся изменить поле в базе данных mySQL от TIMESTAMP до Text и преобразовать существующие данные. Однако это похоже на самый надежный способ сравнения. Есть ли способ конвертировать из одного в другой, или мне нужно будет воссоздать данные из исходного источника? – Linda

+0

Несомненно. Класс SimpleDateFormat предназначен для конвертирования между отметками времени и текстом. Подумайте о том, какой часовой пояс вы хотите использовать, потому что вы по-прежнему будете получать ту же проблему, если вы конвертируете временные метки в текст, который находится в 1-часовом часе в тот день, когда заканчивается переход на летнее время; то есть они собираются выйти из строя. В зависимости от того, как это будет использоваться, лучше всего использовать часовой пояс, который не имеет летнего времени, когда вы делаете свое первоначальное преобразование. Таким образом, ваши временные метки будут оставаться в последовательности, хотя некоторые из них могут быть «неправильными». –

 Смежные вопросы

  • Нет связанных вопросов^_^