#java #weka #simpledateformat #arff
#java #weka #simpledateformat #arff
Вопрос:
У меня есть большой файл ARFF с данными, который выглядит примерно так:
555,"2011-03-13 01:50:48.000",0
540,"2011-03-13 02:10:19.000",0
Чтобы облегчить его анализ, я объявил второй атрибут следующим образом:
@attribute RecordedOn date "yyyy-MM-dd HH:mm:ss.SSS"
Анализатор, который использует Java SimpleDateFormat, отлично работает с первой строкой (и парой миллионов строк, которые очень похожи на нее), но захлебывается на нескольких строках, как и вторая. Я заметил, что он блокирует только одну строку, час которой равен «02» — фактически, вторая строка обрабатывается нормально, если я изменяю ее на 540,"2011-03-13 01:10:19.000",0
. Чтобы добавить загадочности, некоторые строки с 02
в любом случае анализируются нормально. Нравится: 1,"2006-12-16 02:58:51.000",111
Итак, кто-нибудь знает, что происходит? Какой-нибудь совет? Заранее спасибо.
Ответ №1:
Вы почти наверняка интерпретируете даты как местное время в часовом поясе, в котором соблюдается летнее время. 13 марта 2011 года в Соединенных Штатах началось переход на летнее время; это означает, что часы переводятся с 01: 59: 59 на 03:00:00, пропуская все 2 часа. «2011-03-13 02:10:19.000» местное время никогда не было, например, в Нью-Йорке.
Комментарии:
1. Вау, хорошее решение. Вы абсолютно правы — другие проблемы включают 9 марта 2008 и 11 марта 2007. Для этого конкретного набора данных я только что прокомментировал затронутые строки. Но для будущих, я думаю, мне нужно исследовать, как были установлены часы на датчиках. Поскольку я не могу изменить язык напрямую, было бы лучшим решением написать скрипт для преобразования всего в стандартное время?
2. Глядя на JavaDoc, SimpleDateFormat имеет метод «setTimeZone», который вы могли бы установить в GMT, таким образом интерпретируя даты в часовом поясе, в котором не соблюдается летнее время. Это должно решить вашу проблему, если у вас нет датчиков в разных часовых поясах, которые вам нужно сравнить.
Ответ №2:
У меня была такая же проблема с некоторыми данными, и я мог бы использовать это, изменив свой системный часовой пояс на America / Phoenix (поскольку они не используют летнее время). Другое решение, которое я нашел позже, — просто изменить часовой пояс JVM при запуске WEKA (https://www.baeldung.com/java-jvm-time-zone )