Разбор строк DateTime с часовыми поясами для различных браузеров - PullRequest
1 голос
/ 11 марта 2011

Я читал много сообщений на эту тему и пробовал примеры кода, но я не могу заставить мой анализ работать.

В моей форме есть dijit DateTextBox. Я заметил, что при использовании в разных браузерах я получаю разные String представления даты и времени. Например, сегодняшняя дата в:

IE8:

Fri Mar 11 00:00:00 MST 2011

Mozilla / Chrome / Safari:

Thu Mar 11 2011 00:00:00 GMT-0700 (US Mountain Standard Time)

Опера:

Thu Mar 11 2011 00:00:00 GMT-0700

В своем коде я создал следующие SimpleDateFormat:

private final static SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
private final static SimpleDateFormat dateFormat2 = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ (zzzz)", Locale.US);
private final static SimpleDateFormat dateFormat3 = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ", Locale.US);

Затем я попытаюсь разобрать его позже так:

            try {
                calcDate = dateFormat.parse(changeDate); 
            } catch (ParseException e) {
                try {                   
                    calcDate = dateFormat2.parse(changeDate);
                } catch (ParseException e2) {
                     try {
                         calcDate = dateFormat3.parse(changeDate);
                     } catch (ParseException e3) {
                         e3.printStackTrace();
                     }
                }
            }

Пока только IE8 анализирует правильно. Я создал несколько операторов для вывода строк перед синтаксическим анализом, и, похоже, мои форматы соответствуют шаблонам.

Я даже установил библиотеку времени joda и попробовал некоторые примеры, подобные этому:

    String currentDate = "Sun Mar 29 2009 00:00:00 GMT-0700";
    DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM dd yyyy HH:mm:ss zZ");
    DateTime myDate = formatter.parseDateTime(currentDate);

Это дает мне ошибку «Неверный формат ..... GMT-0700 искажен»

Пожалуйста, дайте мне знать, что я делаю неправильно. Спасибо

Ответы [ 3 ]

0 голосов
/ 15 марта 2011

Хорошо, посмотрев на это снова, я нашел способ, который работает на всех браузерах, упомянутых выше.

Я изменил свой второй формат даты на

private final static SimpleDateFormat dateFormat2 = new SimpleDateFormat("EEE MMM dd yyyy", Locale.US);

Затем я взял первые 15 символов из строки даты, возвращенной из браузера, и проанализировал ее следующим образом:

            try {
                calcDate = dateFormat.parse(changeDate); 
            } catch (ParseException e) {
                try {
                     changeDate = changeDate.substring(0, 15);                      
                    calcDate = dateFormat2.parse(changeDate);
                } catch (ParseException e2) {
                     e2.printStackTrace();
                }
            }

Работает так, как должно.

0 голосов
/ 18 апреля 2013

Для второго формата попробуйте это:

new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z (zzzz)")
0 голосов
/ 11 марта 2011

Вы можете рассмотреть синтаксический анализ строки, представляющей дату на стороне клиента.Таким образом, ваш сервер знает, какой формат он получит, независимо от реализации браузера.

...