Avatar billede netspinner Nybegynder
22. maj 2006 - 12:05 Der er 4 kommentarer og
1 løsning

Præcision af datoformat i SimpleDateFormat

Hej,
Jeg har specificeret datoformat med
      DateFormat df = new SimpleDateFormat("dd-MM-yy");

Når jeg validerer om datoinput er korrekt med

      try
      {
          df.parse(dateField.getText());
      }
      catch (ParseException parsing)
      {
          JOptionPane.showMessageDialog(null, "Fejl i dato");
      }

så accepterer den også datoinput som 2006-05-06, OG helt ugyldige format som 2006-32-32 og 20001-39-393. Hvad går der lige galt?!! Validerer den kun på om der er 2 bindestreger og integers imellem? For så er det da en af de mest ubrugelige metoder jeg er stødt på...
Avatar billede _carsten Nybegynder
22. maj 2006 - 12:22 #1
Du skal bruge setLenient
      try
      {  df.setLenient(false);
          df.parse(dateField.getText());
      }
      catch (ParseException parsing)
      {
          JOptionPane.showMessageDialog(null, "Fejl i dato");
      }


Eksempel;

public class DateTest {

    public DateTest() {
    }

    public static void main(String[] args) {
        DateFormat df = new SimpleDateFormat("dd-MM-yy");
        df.setLenient(false);
        try {
           
            System.out.println("" + df.parse("31-13-06"));
        } catch (ParseException ex) {
            JOptionPane.showMessageDialog(null, "Tospande");
        }
       
        try {
           
            System.out.println("" + df.parse("31-12-06"));
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
       
    }
}
Avatar billede _carsten Nybegynder
22. maj 2006 - 12:34 #2
Lidt forklaring:

Ved at bruge df.setLenient(false); sikrer du at datoer behandles "normalt" ellers accepteres datoen 31-13-06 som værende ok, dog med den forskel at datoen tolkes som 31-01-07 (der rulles bare videre, hvis du forstår hvad jeg mener)
Avatar billede netspinner Nybegynder
22. maj 2006 - 12:38 #3
Det var dog utroligt, at så lidt skulle til. Det har voldet mig problemer i godt 4 dage nu. Jeg kan huske at jeg er stødt på setLenient(); før, men fik aldrig undersøgt det lidt mærkelige ord :) Tak for forklaringen - kast et svar til
Avatar billede _carsten Nybegynder
22. maj 2006 - 12:41 #4
Svar :)
Avatar billede arne_v Ekspert
22. maj 2006 - 13:11 #5
jeg har før brugt det lille trick at kalde format på df'eren og sammenligne
om det gav den origimal streng igen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester