jak sprawdzic poprawny format daty

0

hej,
potrzebuje miec metode ktora zamieni String na Timestamp. Jesli String bedzie mial forme "yyyy-mm-dd", a ja oczywiscie potrzebuje "yyyy-MM-dd HHss") no to dostane exception. zastanawiam sie, czy mozna sprawdzic podawany argument ma format? tzn zamienie sobie tego String na Date i czy moge jakos latwo sprawdzic czy ma on format "yyyy-mm-dd" czy "yyyy-MM-dd HHss"? czy musze to robic recznie, tzn np sprawdzac czy String posiada ":", jesli tak to znaczy ze ma odpowiedni format, jesli nie, to najwyrazniej jest to "yyyy-mm-dd"?

pzdr,
misty

0
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(stringZDatą);

To działa dokładnie tak, jak chcesz - wyrzuca ParseException przy nieprawidłowym formacie, zwraca nowy obiekt Date przy prawidłowym.

Można też użyć regexu do samego sprawdzenia:

stringZDatą.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}");
0

Takiej magii to raczej nie dostaniesz. Np gdy mam 01.02.03 to nie wiadomo czy to jest 1 lutego 2003 czy może 2 styczeń 2003 czy też może 2 marzec 2001.

Możesz np zrobić sobie listę wzorców i odpalać SimpleDateFormat.parse() z kolejnymi wzorcami, aż się sparsuje :)

0

iooi, ja chcialam metode ktora mi sprawdzi czy format jest taki jaki oczekuje. czyli jesli ja chce by byl "yyyy-MM-dd HHss", a jest "yyyy-MM-dd" to nie rzuci mi ParseException, tylko zwrocilby np jakies id swiadczace o tym jaki to format. i ja wtedy moglabym sobie to obsluzyc.

donki7, tak tez raczej nie zrobie no bo nie moze mi rzucac ParseException ani zadnymi format exceptionami.

chyba faktycznie regexu uzyje..

dzieki iooi, bo w ogole zapomnialam o regexie :)

pzdr, 
 misty
0

A co to za problem zrobić try + catch? Kod z palca, możliwe że niepoprawny:

public String obczajFormat(String data) {
  SimpleDateFormat sdf = new SimpleDateFormat();
  for (String format : formaty) {
    sdf.applyPattern(format);
    try {
      sdf.parse(data);
      return format;
    } catch (Exception ex) {
    }
  }
  return null;
}
0

problem zaden. ale z zalozenia projektowego, w tym miejscu nie bardzo powinno rzucac wyjatkiem. regexy beda ok.

 pzdr
0

Tylko ze donki7 wlasnie to probuje Tobie pokazac, ze mozna nie rzucac wyjatkiem niezaleznie od tego, czy beda to regexpy, czy parse() ;)

Jego metoda obczajFormat() zadnym wyjatkiem nie rzuca. Jest on obslugiwany wewnatrz metody.

0

tak, ale jak bedzie exception to zwroci null. a ja musze zamieniac. tzn tak-wpierw sprawdzam czy mam oczekiwany format - jesli nie, to zadnej klauzuli try-catch! po prostu if(nie) then zamienNaOczekiwanyFormat(). na pewno nie bede w catch zamieniac formatu!! w ogole nie chce miec try-catch w kodzie. dlatego regex :)

0

Jak będzie exception to pętla będzie dalej lecieć i sprawdzać kolejne formaty. Null zostanie zwrócony tylko jeśli żaden z podanych formatów nie przypasuje. Nie widzisz tego? Mam ci po kolei tłumaczyć jak działa kod Javowy?

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