2010-05-12 11 views
7

Mam datę JS, która jest konwertowana przez Dojo do formatu RFC822. Wywołanie funkcji - dojo.date.toRfc3339 (jsDate), generuje następującą datę - 2007-02-26T20: 15: 00 + 02: 00.RFC822 Pezowanie strefy czasowej w Javie

Mam aplikacji, która używa daty Java SimpleDateFormat do analizowania w datach wygenerowanych powyżej. Mam problem z analizowaniem tego formatu daty ze względu na strefę czasową. Starałem się używać

rrrr-mm-dd'T'GG: MM: SSZ

to zawiedzie jako 'Z' dla strefy czasowej nie oczekują ':' charakter. Czy ktoś wie, jak określić wzór do obsługi daty RFC822 z ":"?

rewizja:

Dzięki za poprawnie interpretując to, co próbuję zrobić :) I miała powiedzieć, że data jest generowanie w RFC3339 i potrzebowałem rfc822. Wygląda na to, że będę musiał zastąpić JavaScript. Miałem nadzieję, że nie będę musiał tego robić i mogę określić wzór formatu daty bez konieczności modyfikowania żadnego kodu Java, ponieważ format daty jest po prostu wstrzykiwany w komponent Spring aplikacji.

Czy istnieje sposób na określenie w wyrażeniu formatu daty, aby zignorować znaki w sekwencji (bez wykonywania operacji na sznurku)? W tym przypadku chciałbym zignorować dowolne ":" lub po prostu zignorować strefę czasową razem?

Odpowiedz

1

Wyciągnę ":" ze strefy czasowej i użyję formatu, który posiadałeś powyżej.

3

Działa

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")); 

(Uwaga Mam podjęciem ostatecznej dwukropek z formatem po „Z” specyfikacją.)

2

RFC822 nie pozwala dwukropek być w czasie strefa porcji daty. Oczekuje tylko 4 cyfry. Nazwa tej metody Dojo wskazuje, że używa ona RFC3339. Wygląda na to, że ma praktycznie taki sam format jak ISO8601. Tak się składa, że ​​Joda Time ma ISODateTimeFormat, który jest zgodny z ISO8601, jeśli możesz korzystać z tej biblioteki. Metoda dateTimeNoMillis() wygląda jak dopasowanie z formatem Dojo. To naprawdę jest ładniejsze niż standardowy interfejs API Data i czas Java. W przeciwnym razie sugestia o wysokiej zawartości alkoholu będzie drogą do zrobienia.

Aktualizacja w odpowiedzi do aktualizacji Jamen za

nie istnieje sposób, aby mieć Dojo użyć formatu, który nie zawiera strefę czasową? Następnie możesz dostosować format po stronie Java, aby dopasować. Nie wiem zbyt wiele o Dojo i nie udało mi się znaleźć żadnej dokumentacji dotyczącej udostępnianej funkcji 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

Zamiast używać dojo.date.toRfc3339 (jsDate) można utworzyć własną funkcję z niestandardowym łańcuchem formatu.

Coś jak poniżej usunie dwukropek i powinno być możliwe do formatowania według formatu Java.

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

Można to zrobić bez rodzajowo Java 7. Mam 2 pytania zadawane w StackOverflow na ten temat w ciągu 2012 roku, więc istnieje rozwiązanie, które nie wymaga żadnych bibliotek innych firm.

Wystarczy sprawdzić implementację przedstawioną w opisie mojego latest question, która również wskazuje na wcześniejszą, która omawia dokładnie ten problem.

Powiązane problemy