• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java - Operacje na dacie...

0 głosów
809 wizyt
pytanie zadane 13 maja 2016 w Java przez mkl215 Początkujący (280 p.)
edycja 13 maja 2016 przez mkl215

Hejka. nazywam się Marcin, jestem anonimowym programistą, mam problem :)

Chcę wczytać datę z łańcucha znaków, jednak mam z góry narzucony format daty:
sData1 = "29-Mar-1998";

W tym przypadku korzystam z dobrodziejstw Java 8 i klasy DateTimeFormatter:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");

Jednak tu pojawia się problem, prawdopodobnie związany z językową strefą czasową, bo w takim przypadku:
sData2 = "29-mar-1998"; // wszystko pięknie śmiga, mogę zrobić cokolwiek zechcę
Jednak przy sData1 otrzymuję wyjątek:
DateTimeParseException: Text '29-Mar-1998' could not be parsed at index 3

Pomożecie? Ogólnie mógłbym zmienić w jednym takim łańcuchu znakowym te literki czy w danym pliku, jednak takich dat mam więcej niż 10 tysięcy :), a wujek google nie daje mi żadnych wskazówek... Przykładowy kod programu, z trzeba przykładowymi łańcuchami:

public class testDaty {
    public static void main(String[] args) {
        String sData1 = "29-Mar-1998"; // <- wyrzuca wyjątek...
        String sData2 = "29-mar-1998"; // <- działa

        String sData2 = "12-Jan-2010"; // Mam ich więcej do obsłużenia...
        String sData3 = "02-Nov-1999";

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
        
        LocalDate date = LocalDate.now();     //     Przykładowa klasa daty
        String text = date.format(formatter);    //     Ogólnie formatter działa
        System.out.println(text);    // Ani wyjątku, ani problemu out: "13-maj-2016"

        LocalDate date1 = LocalDate.parse(sData1, formatter);    // tu problem...
        System.out.println(date1);
    }
}

 

komentarz 13 maja 2016 przez iWantCode Bywalec (2,170 p.)
może wcześniej pozamieniaj litery na małe
komentarz 14 maja 2016 przez mkl215 Początkujący (280 p.)
Jeśli w pliku masz koło 2 milionów dat to zamiana wszystkich na "małe" litery (do tego nie wiem czy mamy taką datę jak Jun... albo Apr... więc chyba nie pomoże).

Chodziło bardziej o dodanie opcji lokalizacji formatu daty, patrz jedną odpowiedź niżej.

Pozdrawiam

1 odpowiedź

+1 głos
odpowiedź 13 maja 2016 przez bumpMind Gaduła (4,260 p.)

Może to Ci pomoże stackoverflow

komentarz 14 maja 2016 przez mkl215 Początkujący (280 p.)

Działa :)

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.UK);

Kluczowy jest tu drugi argument - domyślny raczej tam gdzie jest JVM, czyli w moim przypadku Polska, dlatego format zapisu daty był skrótem po polsku, a wystarczyło ustawić inny, tego właśnie znaleźć nie mogłem :) Dzięki !!!

komentarz 14 maja 2016 przez bumpMind Gaduła (4,260 p.)
No problem ;)

Podobne pytania

0 głosów
1 odpowiedź 2,000 wizyt
pytanie zadane 13 grudnia 2017 w Java przez victordeleco2 Użytkownik (920 p.)
0 głosów
1 odpowiedź 867 wizyt
pytanie zadane 22 kwietnia 2017 w PHP przez niezalogowany
0 głosów
2 odpowiedzi 232 wizyt
pytanie zadane 29 stycznia 2019 w Java przez Patryk01 Obywatel (1,270 p.)

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...