Avatar billede aslan Nybegynder
06. maj 2002 - 16:49 Der er 21 kommentarer og
1 løsning

kontrolere datoer?

Jeg har en String startDato og en String slutDato som via en grænseflade bliver tastet ind . Er det muligt at kontrolere at startDatoen er før slutDatoen?
Avatar billede lyhr007 Nybegynder
06. maj 2002 - 17:14 #1
Hvilket format er de i.

yy-mm-dd

anyways hvordan vælger de datoen via et textfield eller en datepicker ?
Avatar billede aslan Nybegynder
06. maj 2002 - 17:21 #2
via en textfield !
Avatar billede lyhr007 Nybegynder
06. maj 2002 - 17:23 #3
Hvis du bruger en DatePicker

http://industry.java.sun.com/solutions/products/by_product/0,2348,all-3731-99,00.html

En DatePicker.

Når vi så har en Date kan vi bruge:

after(Date)
Tests if this date is after the specified date.

before(Date)
Tests if this date is before the specified date.

For at finde ud af om hvilken dato der kommer først.




Ellers skal du have parset din String til en Date, hvilket kan være svært.
Avatar billede aslan Nybegynder
06. maj 2002 - 17:26 #4
Det er en simpel display jeg har min textfield så det må gå fra string til Date!
Avatar billede lyhr007 Nybegynder
06. maj 2002 - 17:30 #5
Ok så skal vi til at parse din String:

http://www.stanford.edu/~jichun/CS193J/PP1/Convert.html

Men det kræver at brugeren indtaster den på en bestemt måde.
Avatar billede aslan Nybegynder
06. maj 2002 - 17:48 #6
ok kunne jeg få et eksempel på hvor du  parser string om til Date?
Avatar billede lyhr007 Nybegynder
06. maj 2002 - 17:53 #7
jada...

String minDatoString = "4/1/99"; // i dit tilfælde vil det være fra grænsefladen.

Date minDato = Convert.stringToDate(minDato);
Avatar billede disky Nybegynder
06. maj 2002 - 18:13 #8
Du skal anvende en SimpleDateFormatter til opgaven, i den opsætter du et dato format, og den skal nok fortælle dig hvis input ikke er korrekt.
Avatar billede aslan Nybegynder
06. maj 2002 - 18:19 #9
disky endnu engang kunne jeg få et lille eksempel?
Avatar billede aslan Nybegynder
06. maj 2002 - 18:29 #10
Det her giver ihvertfald fejl

class Reservation
{

    int reservationsNr,gæstNr,antalPers;
    int datoUdlStart,datoUdlSlut;

Date start = stringToDate(datoUdlStart);
Date slut = stringToDate(datoUdlStart);

    Reservation(int r,int gNr,int an,int start,int slut)
    {
        reservationsNr = r;
        gæstNr = gNr;
        antalPers = an;
        datoUdlStart = start;
        datoUdlSlut = slut;
    }
    public String toString()
    {

        return "Reservations Nr "+reservationsNr+"Gæste Nr :"+gæstNr+" Dato Udl. Start :"+datoUdlStart+
        " Dato Udl. Slut :"+datoUdlSlut+" Antal Personer :"+antalPers;
    }
}
Avatar billede aslan Nybegynder
06. maj 2002 - 22:34 #11
Det her giver oxo fejl:

class Reservation
{

    int reservationsNr,gæstNr,antalPers;
    String datoUdlStart,datoUdlSlut;

Date start = Convert.stringToDate(datoUdlStart);
Date slut = Convert.stringToDate(datoUdlStart);

    Reservation(int r,int gNr,int an,String start,String slut)
    {
        reservationsNr = r;
        gæstNr = gNr;
        antalPers = an;
        datoUdlStart = start;
        datoUdlSlut = slut;
    }
    public String toString()
    {

        return "Reservations Nr "+reservationsNr+"Gæste Nr :"+gæstNr+" Dato Udl. Start :"+datoUdlStart+
        " Dato Udl. Slut :"+datoUdlSlut+" Antal Personer :"+antalPers;
    }
}
Avatar billede disky Nybegynder
07. maj 2002 - 11:33 #12
Jamen her er et eksempel.
/*
* DatoTest.java
*
* Created on 7. maj 2002, 11:25
*/

import java.util.*;
import java.text.*;

/**
*
* @author  Reinke
* @version
*/
public class DatoTest
{
   
    /** Creates new DatoTest */
    public DatoTest()
    {
        try
        {
            //først en der er korrekt
            String foedselsdag="01/05/72";
            SimpleDateFormat dFormat=new SimpleDateFormat("dd/MM/yy");
            dFormat.setLenient(false);
            Date dato=dFormat.parse(foedselsdag);
            System.out.println("dato = "+dato.toString());
           
        }
        catch(ParseException e)
        {
            System.out.println("Den korrekt virkede ikke !!");
        }
       
        try
        {
            //Så en forkert
            String foedselsdag="44/32/72";
            SimpleDateFormat dFormat=new SimpleDateFormat("dd/MM/yy");
            dFormat.setLenient(false);
            Date dato=dFormat.parse(foedselsdag);
            System.out.println("dato = "+dato.toString());
        }
        catch(ParseException e)
        {
            System.out.println("Den forkerte fejlede");
        }
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main(String args[])
    {
        new DatoTest();
    }
   
}



Hele fidusen er
            SimpleDateFormat dFormat=new SimpleDateFormat("dd/MM/yy");
            dFormat.setLenient(false);


Den første linie definerer et gyldigt format
Den anden linie forlanger at input skal være gyldigt.
Avatar billede aslan Nybegynder
07. maj 2002 - 18:13 #13
burde det her være forkert?

    boolean checkDatoer(String start,String slut)
    {
        try{
              SimpleDateFormat dFormat=new SimpleDateFormat("dd/MM/yy");
              dFormat.setLenient(false);
              Date datoStart=dFormat.parse(start);
              Date datoSlut=dFormat.parse(slut);

              SimpleDateFormat dFormat2=new SimpleDateFormat("dd/MM/yyyy");
              dFormat2.setLenient(false);
              Date datoStart2=dFormat2.parse(start);
              Date datoSlut2=dFormat2.parse(slut);

              SimpleDateFormat dFormat3=new SimpleDateFormat("dd-MM-yy");
              dFormat3.setLenient(false);
              Date datoStart3=dFormat3.parse(start);
              Date datoSlut3=dFormat3.parse(slut);

              SimpleDateFormat dFormat4=new SimpleDateFormat("dd-MM-yyyy");
              dFormat4.setLenient(false);
              Date datoStart4=dFormat4.parse(start);
              Date datoSlut4=dFormat4.parse(slut);

              SimpleDateFormat dFormat5=new SimpleDateFormat("dd.MM.yy");
              dFormat5.setLenient(false);
              Date datoStart5=dFormat5.parse(start);
              Date datoSlut5=dFormat5.parse(slut);

              SimpleDateFormat dFormat6=new SimpleDateFormat("dd.MM.yyyy");
              dFormat6.setLenient(false);
              Date datoStart6=dFormat6.parse(start);
              Date datoSlut6=dFormat6.parse(slut);

              if(datoStart.before(datoSlut))return true;
              else if(datoStart2.before(datoSlut2))return true;
              else if(datoStart3.before(datoSlut3))return true;
              else if(datoStart4.before(datoSlut4))return true;
              else if(datoStart5.before(datoSlut5))return true;
              else if(datoStart6.before(datoSlut6))return true;
          }
        catch(ParseException e){}
      return false;
    }
Avatar billede disky Nybegynder
07. maj 2002 - 20:14 #14
ser ok ud
Avatar billede aslan Nybegynder
07. maj 2002 - 20:24 #15
Det virker desvære ikke!
Avatar billede disky Nybegynder
08. maj 2002 - 12:13 #16
hvad går det galt ?

tilføj lige en

e.printStackTrace()

i din catch(ParseException e){}
Avatar billede disky Nybegynder
08. maj 2002 - 12:21 #17
Det er fordi dit check sker inde i din try{} så hvis der kommer en exception og det gør der altid så fejler den.

Dette her virker:
/*
* DatoTest.java
*
* Created on 7. maj 2002, 11:25
*/

import java.util.*;
import java.text.*;

/**
*
* @author  Reinke
* @version
*/
public class DatoTest
{
   
    /** Creates new DatoTest */
    public DatoTest()
    {
        System.out.println("check="+checkDatoer("21/4/88","01/05/72"));
    }
   
    private boolean checkDatoer(String start, String slut, String format)
    {
        try
        {
            SimpleDateFormat dFormat=new SimpleDateFormat(format);
            dFormat.setLenient(false);
            Date datoStart=dFormat.parse(start);
            Date datoSlut=dFormat.parse(slut);
            if(datoStart.before(datoSlut))return true;
        }
        catch(ParseException e)
        {
        }
        return false;
    }
   
    private boolean checkDatoer(String start,String slut)
    {
        if(checkDatoer(start,slut,"dd/MM/yy")) return true;
        if(checkDatoer(start,slut,"dd/MM/yyyy")) return true;
        if(checkDatoer(start,slut,"dd-MM-yy")) return true;
        if(checkDatoer(start,slut,"dd-MM-yyyy")) return true;
        if(checkDatoer(start,slut,"dd.MM.yy")) return true;
        if(checkDatoer(start,slut,"dd.MM.yyyy")) return true;
        return false;
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main(String args[])
    {
        new DatoTest();
    }
   
}



Dog kræver den at man ALTID bruge samme formattering af start og slut dato.
Avatar billede disky Nybegynder
08. maj 2002 - 12:22 #18
p.s. Det kan godt betale sig at lave generelle metoder som jeg har gjort i ovenstående eksempel.
Avatar billede aslan Nybegynder
08. maj 2002 - 15:23 #19
takker, men jeg er bare ikke helt med på hvad dFormat.setLenient(false);
gør?
Avatar billede disky Nybegynder
08. maj 2002 - 22:10 #20
Den gør at den skal kunne parse din input String 100% ellers fejler den.

Har du ikke sat den til false, forsøger den hårdnakket at parse alt

f.eks. kan den godt parse 48/14/2002, resultatet er dog ikke brugbart.
Avatar billede aslan Nybegynder
08. maj 2002 - 22:35 #21
tak:)
Avatar billede disky Nybegynder
08. maj 2002 - 22:37 #22
selv tak.
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