Avatar billede sito Nybegynder
01. oktober 2003 - 11:19 Der er 6 kommentarer og
2 løsninger

validering af dato?

Hej

Har lavet en applet, hvor brugeren skal indtaset en dato, som så bliver valideret i henhold til dage, måneder og år. Har fået den til at virke, men vil gerne have den til at se om der er 31 dage i en given måned. Har også lavet betingelsen til det, men vil gerne have føjet lidt flere måneder på, så man ikke skal lave betingelse for hver måned... hvordan gør man det?

Min betingelse:

if (day <= 31 && day >= 1 && month == 1){
            return true;
        }

Har forsøgt at lave komma imellem a la 1,3,5,7,8,10,12, men det vil den ikke.

Håber i kan hjælpe.
Avatar billede arne_v Ekspert
01. oktober 2003 - 11:26 #1
Brug den her teknik:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class CheckDate {
  private static DateFormat df = new SimpleDateFormat("yy-MM-dd");
    public static boolean isValidDate(String ds) throws ParseException {
      return ds.equals(df.format(df.parse(ds)));
    }
    private static void test(String ds) {
      try {
        System.out.println(ds + " " + isValidDate(ds));
      } catch (ParseException e) {
        e.printStackTrace();
      }
    }
  public static void main(String[] args) {
      test("03-04-10");
      test("03-13-32");
      test("03-02-29");
      test("04-02-29");
  }
}
Avatar billede anadan Nybegynder
01. oktober 2003 - 11:32 #2
hvad med...?

private int[] months = {1,3,5,7,8,10,12};
public boolean metodenavn(int month){
  return Arrays.binarySearch(month, month);
}
Avatar billede sito Nybegynder
01. oktober 2003 - 11:34 #3
Hmmm, er der ikke en lettere måde at gøre det på. Har skrevet begge klasser, og det eneste der mangler er lige det her problem. Er der ikke en slags regulære udtryk som fx i PHP man kan anvende?

Hele metoden til at tjekke:

public boolean isValid() {
        if (isLeapYear() == true && month == 2 && day <= 29){
            return true;
        }
        if(month == 2 && day > 28){
            return false;
        }
        if (day <= 31 && day >= 1 && month == 1){
            return true;
        }
        if (day <= 30 && day >= 1 && month <=12 && month >=1 && year >=1900 && year <=2099){
            return true;
        }
        else {
            return false;
        }
    }
Avatar billede anadan Nybegynder
01. oktober 2003 - 11:35 #4
sorry, det skulle være
return Arrays.binarySearch(months, month);
Avatar billede sito Nybegynder
01. oktober 2003 - 11:42 #5
Kan gøre det sådan:

if (day <= 31 && day >= 1 && month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
            return true;
        }

Men der må være en nemmere måde...?
Avatar billede arne_v Ekspert
01. oktober 2003 - 12:05 #6
Ja.

Se mit svar.

    private static DateFormat df = new SimpleDateFormat("yy-MM-dd");
    public static boolean isValidDate(String ds) throws ParseException {
      return ds.equals(df.format(df.parse(ds)));
    }

4 linier som håndterer alt !
Avatar billede sito Nybegynder
01. oktober 2003 - 12:52 #7
Fint. Tak for hjælpen, i deler ponitene :)
Avatar billede sito Nybegynder
01. oktober 2003 - 12:52 #8
pointene endda...
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