Avatar billede gittemadsen Nybegynder
13. marts 2003 - 18:49 Der er 12 kommentarer og
1 løsning

Udregning af tidsperiode

Jeg skal lave en metode som skal udregne en leverance.

Først skal den finde ud af hvad dags dato er, så skal den ligge en tidsperiode til, såsom 2 uger, ell 2 måneder. Tidsperioden vælges af brugeren. Denne fundne dato skal være statdatoen. Slutdatoen skal være statdatoen + den samme tidsperiode. Så skal man ned i databasen og hente nogle informationer fra de dage der ligger imellem start og slutdatoen, som man skal lave videre beregninger på.
Hvordan dato skal være i Java ved jeg ikke, eller hvordan man ligger det samme så det er korrekt men i databasen ligger det som date(yyyy-mm-dd).

Eksempel:
returtype? startedato= dagsdato + tidsperiode; //Hvis tidsperioden er en måned; 2003-03-13 + tidsperiode= 2003-04-13
returtype? slutdato= startdato + tidsperiode; // 2003-04-13+ tidsperiode = 2003-05-13;
Og det er så imellem den 2003-04-13 og 2003-05-13 at man skal ned og finde noget i databasen og hive med op.

Giver det nogen mening og kan nogle hjælpe.

GM
Avatar billede arne_v Ekspert
13. marts 2003 - 19:31 #1
Du skal have fat i java.util.Date, java.sql.Date, java.util.Calendar
og java.util.GregorianCalendar klasserne.

Her er et lille eksempel som udskriver de næste 14 dage:

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class NextTwoWeeks {
    public static void main(String[] args) {
        Calendar ref = new GregorianCalendar();
        for(int i = 0; i < 14; i++) {
            ref.add(Calendar.DAY_OF_YEAR, 1);
            System.out.println(ref.getTime());
        }
    }
}
Avatar billede arne_v Ekspert
13. marts 2003 - 19:42 #2
Det her eksempel er måske lidt tættere på hvad du vil:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class NextTwoWeeks {
    public static void main(String[] args) {
        test("15/03/2003", 14);
    }
    private static void test(String start, int days) {
        try {
            DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
            Calendar c = new GregorianCalendar();
            c.setTime(df.parse(start));
            for(int i = 0; i < days; i++) {
                c.add(Calendar.DAY_OF_YEAR, 1);
                System.out.println(c.getTime());
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
13. marts 2003 - 19:44 #3
Endnu et par små forbedringer:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class NextTwoWeeks {
    public static void main(String[] args) {
        test("2003-03-15", 14);
    }
    private static void test(String start, int days) {
        try {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Calendar c = new GregorianCalendar();
            c.setTime(df.parse(start));
            for(int i = 0; i < days; i++) {
                c.add(Calendar.DAY_OF_YEAR, 1);
                System.out.println(df.format(c.getTime()));
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
Avatar billede gittemadsen Nybegynder
13. marts 2003 - 20:57 #4
Ja det er noget i den retning, men jeg skal bruge slutdato, jeg behøver ikke datoerne imellem, kun start og slut da jeg skal hente fra databasen de ting der er der i mellem.
Avatar billede arne_v Ekspert
13. marts 2003 - 21:11 #5
Det bliver det jo kun nemmeere af !

:-)

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class NextTwoWeeks {
    public static void main(String[] args) {
        test("2003-03-15", 14);
    }
    private static void test(String start, int days) {
        try {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Calendar c = new GregorianCalendar();
            c.setTime(df.parse(start));
//            for(int i = 0; i < days; i++) {
//                c.add(Calendar.DAY_OF_YEAR, 1);
//                System.out.println(df.format(c.getTime()));
//            }
            c.add(Calendar.DAY_OF_YEAR, days);
            System.out.println(df.format(c.getTime()));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
Avatar billede gittemadsen Nybegynder
13. marts 2003 - 21:54 #6
Jeg har lavet det lidt om, så det passer, men jeg vil bare høre om du kan fortælle mig hvordan jeg får startdato(sd) og slutdato(sld) ud af denne metode til brug i en anden metode?

}
    private static void findDato(String start, int days) {
        try {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Calendar c = new GregorianCalendar();
            c.setTime(df.parse(start));
            c.add(Calendar.DAY_OF_YEAR, days);
            String sd= df.format(c.getTime());
            c.setTime(df.parse(sd));
            c.add(Calendar.DAY_OF_YEAR, days);
            String sld= (df.format(c.getTime()));
      } catch (ParseException e) {
            e.printStackTrace();
        }
Avatar billede arne_v Ekspert
13. marts 2003 - 22:05 #7
Det kan jeg se mindst 2 måder at gøre på.

1)  gem dem og hent dem:

  private static String sd = null;
  private static String sld = null;

    public static void findDato(String start, int days) {
        try {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Calendar c = new GregorianCalendar();
            c.setTime(df.parse(start));
            c.add(Calendar.DAY_OF_YEAR, days);
            sd= df.format(c.getTime()); // <--- ingen erklæring
            c.setTime(df.parse(sd));
            c.add(Calendar.DAY_OF_YEAR, days);
            sld= (df.format(c.getTime()));  // <--- ingen erklæring
      } catch (ParseException e) {
            e.printStackTrace();
        }

      public String getSd() {
          retuurn sd;
      }

      public String getSld() {
          retuurn sld;
      }
Avatar billede arne_v Ekspert
13. marts 2003 - 22:06 #8
Hov.

public static String getSd() {
          return sd;
      }

      public static String getSld() {
          return sld;
      }
Avatar billede arne_v Ekspert
13. marts 2003 - 22:07 #9
2)  public static StartOgSlut findDato(String start, int days)

hvor StartOgSlut er en klasse som indeholder 2 strings sd og sld.
Avatar billede gittemadsen Nybegynder
13. marts 2003 - 22:20 #10
Hvor skriver jeg dem så ud i den klasse jeg smider dem ind i, der sker ikke rigtigt noget, og jeg bruger metode 1. Jeg skal bruge dem i en metode som går ned i databasen og finder alle varenr, samt deres mængde på de dage der ligger imellem de 2 dage.
Hvis du er ved at få spat af at hjælpe er det helt ok, du har hjulpet utroligt meget bare indtil nu. Tak for det.
Avatar billede arne_v Ekspert
13. marts 2003 - 23:15 #11
Så bruger du bare get metoderne.

Noget i retning af:

XXXX.findDato("2003-03-13", 10);
System.out.println(XXXX.getSd() + " - " + XXXX.getSld());

Hvis du skal ned i database, så skal det vel være noget i stil
med:

ResultSet rs = stmt.executeQuery("SELECT felt1,felt2 FROM tabel WHERE datofelt BETWEEN " + XXXX.getSd() + " AND " + XXXX.getSld());

Den præcise udforming skal naturligvis tilpasses din kontekst.
Avatar billede arne_v Ekspert
14. marts 2003 - 01:23 #12
Jeg håber du kan komme videre med det.

Jeg vil iøvrigt først være tilbage på Eksperten Fredag kl. ca. 14.
Avatar billede gittemadsen Nybegynder
14. marts 2003 - 20:48 #13
Du har helt klart fortjent disse point... Tusind tak for hjælpen... Så vil jeg gå videre herfra, men dette har helt klart hjulpet... Virkeligt tak

Det kan være jeg kommer tilbage med et nyt spørgsmål... :o)

Gm
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