Avatar billede mikkelbm Nybegynder
07. juli 2003 - 23:42 Der er 11 kommentarer og
1 løsning

Minutter og timer

Er der en funktion i java der kan regne med timer og minutter?
Forstået på den måde at en bruger taster ind hvornår vedkommende kommmer (8.30) og hvornår han går (10.00).
Dette skulle gerne give 1 time og 30 minutter, og ikke 1 time og 70 min, som hvis man bare trækker dem fra hinanden?

Er der nogen der har eksempler på, hvordan man nemmest kan regne det ud?
Avatar billede arne_v Ekspert
07. juli 2003 - 23:51 #1
Det er der sikkert flere måder at løse på.

Jeg kom frem til:

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

public class TimeSub {
    private static final DateFormat df = new SimpleDateFormat("HH:mm");
    public static void main(String[] args) {
        try {
            Date t1 = df.parse("08:30");
            Date t2 = df.parse("10:00");
            int dif = (int) ((t2.getTime() - t1.getTime()) / 1000);
            int h = dif / 3600;
            int m = (dif - h * 3600) / 60;
            System.out.println(h + " timer " + m + " minutter");

        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
07. juli 2003 - 23:53 #2
Output:

1 timer 30 minutter

PS: Jeg kan se at jeg har brugt ":" til at adskille timer og minutter mens
    du ville have ".", men der ændrer du bare i tidsformatet og i
    værdierne.
Avatar billede mikkelbm Nybegynder
07. juli 2003 - 23:53 #3
Det var lige det jeg skulle bruge - takker....!
Avatar billede mikkelbm Nybegynder
08. juli 2003 - 12:57 #4
Hvis du er der arne_v, kan du måske fortælle mig hvorfor at "1.00" bliver til 0, hvis man parser den til en Date?

Eller er der andre der kan fortælle mig det?
Avatar billede arne_v Ekspert
08. juli 2003 - 13:04 #5
Hvordan ?

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

public class TimeSub {
    private static final DateFormat df = new SimpleDateFormat("HH.mm");
    public static void main(String[] args) {
        try {
            Date t1 = df.parse("1.00");
            Date t2 = df.parse("2.25");
            int dif = (int) ((t2.getTime() - t1.getTime()) / 1000);
            int h = dif / 3600;
            int m = (dif - h * 3600) / 60;
            System.out.println(h + " timer " + m + " minutter");

        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

giver:

1 timer 25 minutter

hos mig ??
Avatar billede mikkelbm Nybegynder
08. juli 2003 - 13:11 #6
Hvis jeg skriver følgende:

Date t = df.parse("1.00");
System.out.println("" + t.getTime()/1000);

Skriver den "0" ud.

Jeg ved ikke om jeg har misforstået noget.....?
Eller om jeg gør det forkert?
Avatar billede mikkelbm Nybegynder
08. juli 2003 - 13:14 #7
Jeg skal bruge det i forbindelse med et system til at udregne løn. Og der er nattillæg efter kl 24. Derfor skal jeg ha' fat i de timer der ligger efter der og lægge dem sammen...
Avatar billede arne_v Ekspert
08. juli 2003 - 13:21 #8
Det gør den også hos mig.

Jeg mener at det skyldes at vi er time foran GMT.

01:00 er 1-JAN-1970 01:00

Tiden er antal sekunder siden 1-JAN-1970 00:00 GMT.

01:00 er 1-JAN-1970 01:00 lokal tid = 1-JAN-1970 00:00 GMT.
Avatar billede mikkelbm Nybegynder
08. juli 2003 - 13:24 #9
Okay, tak for det.
Så den måde jeg skal gøre det på, er at sige (t.getTime()+3600)/1000
Eller er der en bedre måde?
Avatar billede arne_v Ekspert
08. juli 2003 - 13:25 #10
Med hensyn til dit over-midnat problem, så se følgende:

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

public class TimeSub {
    private static final DateFormat df = new SimpleDateFormat("HH.mm");
    public static void main(String[] args) {
        test("1.00", "2.25");
        test("2.25", "1.00");
    }
    private static void test(String ts1, String ts2) {
        try {
            Date t1 = df.parse(ts1);
            Date t2 = df.parse(ts2);
            int dif = (int) ((t2.getTime() - t1.getTime()) / 1000);
            if(dif < 0) {
                dif += 24 * 60 * 60;
            }
            int h = dif / 3600;
            int m = (dif - h * 3600) / 60;
            System.out.println(ts1 + "-" + ts2 + " = " + h + " timer " + m + " minutter");

        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

output:

1.00-2.25 = 1 timer 25 minutter
2.25-1.00 = 22 timer 35 minutter
Avatar billede arne_v Ekspert
08. juli 2003 - 13:25 #11
(den kan stadigvæk ikke klare mere end 24 timer, men mon det er et problem)
Avatar billede mikkelbm Nybegynder
08. juli 2003 - 13:27 #12
Kanon... tak for det.
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