Parsowanie daty nie dziala jak powinno

0

Czesc, mam dziwny problem z parsowaniem daty. Mam zdefiniowany format daty no i chce parsowac. Wszystko byloby ok i na prawde nie wiem czemu nie dziala jak powinno - ale SimpleDateFormat, metoda parse nie rzuca mi wyjatku kiedy np mam dluzszy niz 4 znaki rok. Rzuca tylko wyjatek jesli do daty dam litere. Oto moj kod:

    public static void main(String[] args) {
        String FORMAT = "yyyy-MM-dd HH:mm:ss";

        String date = "2012012012-02-10 23:12:02";
        Date parsedDate = null;

        SimpleDateFormat sdf = new SimpleDateFormat(FORMAT);

        try {

            parsedDate = sdf.parse(date);
            System.out.println("Parsed date: " + parsedDate);

        } catch (ParseException e) {
            System.out.println(e);

        }
    } 

O co chodzi??? czy uzywanie SimpleDateFormat nie sprawdzi mi czy ilosc znakow (rok/miesiac/dzien, itd) sie zgadza? Czy do tego musze uzyc patterna?

     pzdr,
   misty
0

Działa zgodnie z dokumentacją zapewne:

Year: For formatting, if the number of pattern letters is 2, the year is truncated to 2 digits; otherwise it is interpreted as a number.
For parsing, if the number of pattern letters is more than 2, the year is interpreted literally, regardless of the number of digits. So using the pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.

0

no nie kumam no :/

0

Mam tłumaczyć na polski?

For parsing, if the number of pattern letters is more than 2, the year is interpreted literally, regardless of the number of digits.

Jeśli jest więcej niż dwa "y" we wzorcu to rok jest traktowany dosłownie.

For parsing with the abbreviated year pattern ("y" or "yy"), SimpleDateFormat must interpret the abbreviated year relative to some century.(...) During parsing, only strings consisting of exactly two digits, as defined by Character.isDigit(char), will be parsed into the default century. Any other numeric string, such as a one digit string, a three or more digit string, or a two digit string that isn't all digits (for example, "-1"), is interpreted literally.

Rok będzie traktowany względnie do jakiegoś wieku (np XX wieku) tylko jeżeli we wzorcu masz "y" lub "yy" oraz w dacie są dokładnie dwie cyfry oznaczające rok. W każdym innym przypadku rok zostanie potraktowany dosłownie.

Nigdzie nie ma o rzucaniu wyjątku. Dla przykładu u mnie przechodzi twój program dla takich danych:

        String FORMAT = "y-MM-dd HH:mm:ss";

        String date = "202-092-10 23:12:02";

I daje w wyniku:
Parsed date: Thu Aug 10 23:12:02 CET 209

0

No nadal srednio kumam :/ To zeby mi sprawdzal tez dlugosc znakow (tzn yyyy oznacza ze maja byc 4 cyfry w roku) to moze uzyc tylko patterna i matches? Nie moge wykorzystac do tego DateFormate?

1

Od konstrukcji wzorca i daty zależy interpretacja, nie ma nigdzie napisane w dokumentacji o rzucaniu wyjątków jeżeli gdzieś tam liczba cyfr się nie zgadza.

W skrócie - jeśli chcesz mieć sztywną ilość cyfr w roku to musisz regexpa zastosować.

0

Ok, dzieki. Myslalam ze inaczej to dziala. Tzn ze zadziala tez jako regexp i strasznie sie dziwilam jak zobaczylam wyniki.

dzieki za pomoc,
pzdr!

1 użytkowników online, w tym zalogowanych: 0, gości: 1