2010-05-12 4 views
7

У меня есть дата JS, которая преобразуется Dojo в формат RFC822. Вызов функции - dojo.date.toRfc3339 (jsDate), генерирует следующую дату - 2007-02-26T20: 15: 00 + 02: 00.RFC822 Разбор часового пояса на Java

У меня есть приложение, использующее Java Date SimpleDateFormat для анализа в датах, сгенерированных выше. У меня возникают проблемы с разбором формата даты из-за часового пояса. Я пытался использовать

гггг-мм-DD'T'hh: мм: сульфасалазин

Это терпит неудачу в качестве «Z» для часового пояса не ожидает символа «:». Кто-нибудь знает, как бы я указал шаблон для обработки даты RFC822 с помощью::?

редакция:

Спасибо за правильно интерпретировать то, что я пытаюсь сделать :) Я хотел сказать, дата создания в RFC3339, и мне нужно RFC822. Похоже, мне придется переопределить JavaScript. Я надеялся, что мне не придется это делать, и я мог бы указать шаблон формата даты, не изменяя какой-либо код Java, поскольку формат даты просто вводится в компонент Spring приложения.

Только для полноты, есть ли способ указать в выражении формата даты игнорировать символы в последовательности (без выполнения манипуляции/замены строк)? В этом случае я бы сказал, что игнорировать любые «:» или просто игнорировать часовой пояс?

ответ

1

Я бы удалил ':' из часового пояса и использовал формат, который у вас выше.

3

Это работает

SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-DD'T'hh:mm:ssZ"); 
format.parse("2007-02-26T20:15:00+02:00".replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2")); 

(Примечание я принимать окончательное двоеточие из формата после «Z» формата.)

2

RFC822 не позволяет двоеточие быть в то время зоне. Он ожидает всего 4 цифры. Имя этого метода Dojo указывает, что оно использует RFC3339. Кажется, что это практически тот же формат, что и ISO8601. Так получилось, что Joda Time имеет ISODateTimeFormat, совместимый с ISO8601, если вы можете использовать эту библиотеку. Метод dateTimeNoMillis() выглядит как совпадение с форматом Dojo. Это действительно лучше, чем стандартный API дат и времени Java. В противном случае было бы предложено предложение с высокой степенью уверенности.

Обновлено в ответ на обновление Jamen в

не существует ли способ иметь Dojo использовать формат, который не включает в себя часовой пояс? Затем вы можете настроить формат на стороне Java, чтобы он соответствовал. Я мало знаю о Dojo, и я не смог найти документацию по функции toRfc3339, которую она предоставляет.

4
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateUtil { 

    public static Date ParseRFC3339DateFormat(String p_date) 
    { 
     try{ 
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
      String dts = p_date.replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2"); 
      return formatter.parse(dts); 
     }catch (Exception e) { 
       return null; 
     } 
    } 
} 
1

Вместо использования dojo.date.toRfc3339 (jsDate) вы можете создать свою собственную функцию с помощью строки пользовательского формата.

Что-то вроде следующего будет удалять двоеточие и должно быть проанализировано в вашем формате java.

function toRfc3339String(jsDate){ 
    return dojo.date.locale.format(jsDate,{selector: 'date', datePattern:'yyyy-MM-dd\'T\'hh:mm:ssZ'}); 
} 
0

Вы можете сделать это в общем без Java 7. Я попросил 2 вопроса в StackOverflow на это, в 2012 году, так есть решение, которое не нуждается в каких-либо сторонние библиотеки.

Просто проверьте реализацию, представленную в описании моего latest question, что также указывает на более ранний, который обсуждает именно эту проблему.

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