Avatar billede t_mons Nybegynder
02. december 2004 - 11:12 Der er 12 kommentarer og
1 løsning

Dato i uge 53

HEJ

jeg har følgende kode som tager en dato som inparam og smider en uge nummer tilbage...

public String extractPeriodKey(String date) throws ParseException {
       
        System.out.println("inparam " + date);
        String toReturn = "";
       
    DateFormat    df        = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Calendar    cal        = Calendar.getInstance();       
    Date        datex             = df.parse(date);
               
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    cal.setTime(datex);
       
    int            the_year        = cal.get(Calendar.YEAR);
    int            the_month        = cal.get(Calendar.MONTH);
    int            the_date        = cal.get(Calendar.DAY_OF_MONTH);
    int            the_week_day    = cal.get(Calendar.DAY_OF_WEEK);
    int            days_to_add        = 8 - the_week_day;
    if (days_to_add == 7)
    {
        days_to_add = 0;
    }
    the_date += days_to_add;
   
    cal.set(the_year, the_month, the_date);       
   
    int week = cal.get(Calendar.WEEK_OF_YEAR);
    int year = cal.get(Calendar.YEAR);
   
    toReturn = year + "-" + week;               
       
      System.out.println("date to return " + toReturn);
       
        return toReturn;     
    }//extractPeriodKey()



men når jeg sender datoen "2004-12-27 00:00:00"  ind i funktionen (datoen er den første dag i ugen)
får jeg ugen tilbage, men året er 2005 
toReturn = "2005-53"

Hvorfor ??  kan ikke se hvor det går galt
Avatar billede arne_v Ekspert
02. december 2004 - 11:18 #1
Du udskriver år og uge.

Hvis datoen efter efter 31. december så er året 2005.

Og selvom du er inde i 2005 kan ugen jo godt være 53 (fordi den også ligger i 2004).
Avatar billede arne_v Ekspert
02. december 2004 - 11:24 #2
Jeg har lige checket. Datoen bliver 2. januar.

Det er uge 53 (i 2004).

Men året for datoen er jo 2005.
Avatar billede arne_v Ekspert
02. december 2004 - 11:24 #3
Udregn året for torsdag - den vil altid passe !!!!
Avatar billede t_mons Nybegynder
02. december 2004 - 11:28 #4
jaa  den er lidt tricky..  :o) 

jeg kigger lige på det og vender tilbage...

takker på forhånd, det gir lidt mening det du siger, skal bare lige vende den..
Avatar billede t_mons Nybegynder
02. december 2004 - 12:18 #5
hvad så med den her....  sætter feks. dato = onsdagen i en uge 53, hvorfor retunere den  uge 1..

jeg for står det ikke helt

public int getWeekNumber()
{
        int toReturn = 0;
        String wednesday;
        try
    {
            wednesday = "2004-12-29 00:00:00";
            java.util.Date storedDate = this.getTime();
            this.setTime(TUutils.stringToTimestamp(wednesday));
            toReturn = this.get(Calendar.WEEK_OF_YEAR);
            this.setTime(storedDate);               
          }
          catch (ParseException p)
          {
              toReturn = this.get(Calendar.WEEK_OF_YEAR);       
          }

        System.out.println("getWeekNumber() " + toReturn);
        return toReturn;       
    }

skal lige tilføje min klasse extends GregorianCalendar

??

der er noget jeg HELT sikkert ikke forstå
Avatar billede arne_v Ekspert
02. december 2004 - 12:23 #6
Umuligt at sige da jeg ikke ved hvad TUutils.stringToTimestamp gør
Avatar billede t_mons Nybegynder
02. december 2004 - 12:28 #7
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", locale);//English

  /** Converts a string to a java.util.Date (the String format is yyyy-mm-dd hh:mm:ss)
  */
public synchronized static java.util.Date stringToTimestamp(String date) throws ParseException {
  synchronized (sdf)
  { 
        sdf.setLenient(false);       
        return sdf.parse(date);
  }
}
Avatar billede t_mons Nybegynder
02. december 2004 - 12:29 #8
ups
    private static final Locale locale = Locale.FRENCH;
Avatar billede arne_v Ekspert
02. december 2004 - 20:39 #9
Lidt legen med Java afslørede at den her var god:

cal.setMinimalDaysInFirstWeek(4);
Avatar billede arne_v Ekspert
02. december 2004 - 20:41 #10
Jeg ved ikke hvorfor den ikke står rigtigt default, men det gør den altså ikke.

[testet med 1.4.2]
Avatar billede arne_v Ekspert
02. december 2004 - 20:43 #11
PS: Calendar har en add metode som du kan bruge til at lige dage til med.

cal.add(Calendar.DAY_OF_MONTH, days_to_add);

kan spare en del linier kode
Avatar billede t_mons Nybegynder
02. december 2004 - 21:23 #12
perfekt.... 

er sku lidt forvirret over det dato halløj..  he he  :o)

men det virker...

send lige et svar
Avatar billede arne_v Ekspert
02. december 2004 - 21:37 #13
kommer her
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