[Java] Tijden optellen en aftrekken

Pagina: 1
Acties:
  • 617 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 23-06 16:04
Ik ben op zoek naar een tijd class (object) waar in ik een tijd kan zetten (hoeft niet de huidigetijd te zijn). Dit tijd object moet ik dan kunnen optellen en aftrekken van een ander aangemaakt tijd object.

De waarden die daar komen uitrollen mogen rustig negatief zijn (is eigenlijk een must).

Dus 12:00 puls 01:00 = 13:00
Maar 01:00 min 12:00 = -11:00

Als je 12:00 puls 23:00 krijg dat als antwoord 1 dag en 11:00

Ben druk aan het zoeken geweest en hoopte dat er van sun wel een standaard iets was. Had gekeken naar java.util.Date en java.sql.Date, krijg het alleen niet voorelkaar moet daar mee te regenen. Ook met java.util.Calendar krijg ik het niet voor elkaar om de rekenen. Wel met de dagen maar niet los met de tijd.

Zijn er mensen die daar ervaring mee hebben? Tips zijn welkom.

Acties:
  • 0 Henk 'm!

Anoniem: 16223

Kun je niet de uitgangswaarde en de optelwaarde omzetten in seconden. Die bij elkaar optellen en de som (in seconden) weer terug zetten naar een tijd?

Acties:
  • 0 Henk 'm!

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 23-06 16:04
Anoniem: 16223 schreef op 17 september 2004 @ 12:12:
Kun je niet de uitgangswaarde en de optelwaarde omzetten in seconden. Die bij elkaar optellen en de som (in seconden) weer terug zetten naar een tijd?
Daar heb ik ook aan gedacht, alleen kom ik dan aan het klooien met de negatieve tijd. Deze wordt dan niet weergegeven.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-07 11:38

Janoz

Moderator Devschuur®

!litemod

Een date is ene bepaald tijdstip. Waar jij mee wilt rekenen zijn tijdsduren. Waarom reken je niet met het aantal miliseconden? Deze zijn heel makkelijk weer om te rekenen naar een aantal seconden, minuten, user en dagen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 23-06 16:04
Janoz schreef op 17 september 2004 @ 12:16:
Een date is ene bepaald tijdstip. Waar jij mee wilt rekenen zijn tijdsduren. Waarom reken je niet met het aantal miliseconden? Deze zijn heel makkelijk weer om te rekenen naar een aantal seconden, minuten, user en dagen.
Klopt, alleen kreeg ik het niet voorelkaar om die negatieve tijd uit te lezen. Misschien doe ik iets fout en zie ik iets over het hoofd.

op deze link http://www.javapractices.com/Topic85.cjp is een stopwatch gebouwt en werken ze gewoon met een long var. Die ze dat ook weer omzetten naar een tijd. Zoiets als in deze classes heb ik ook geprobeerd. Zolang alles positief blijft gaat alles goed maar als het verschil negatief wordt kom ik aan het knooien.

als ik zoek op java time duration Calculations kom ik ook niet echt verder.

[ Voor 5% gewijzigd door Neptunus op 17-09-2004 12:21 ]


Acties:
  • 0 Henk 'm!

  • raoulduke
  • Registratie: Oktober 2003
  • Niet online

raoulduke

Get in!

Je zegt dat je met Calendar niet ver komt, maar Calendar lijkt mij de uitgewezen kandidaat om mee te werken, kan je misschien de code posten die niet werkt zodat we hem kunnen aanpassen?

Remember, if you have any trouble you can always send a telegram to the Right People.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-07 11:38

Janoz

Moderator Devschuur®

!litemod

Ik zie niet in waarom een negatieve long problemen op zou kunnen leveren. Desnoods neem je de absolute waard en gooi je die door je positieve algoritme. Door te kijken of het orgineel negatief was kun je kijken of het eerder of later is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 23-06 16:04
Kan op het moment niet bij de code. Zal het van het weekeinde even posten. En zal er zelf ook nog even mee spelen.

Alleen de tip van Calendar zou die iets beter toegelicht kunnen worden?

Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 03-07 14:48

Robtimus

me Robtimus no like you

Janoz schreef op 17 september 2004 @ 12:22:
Ik zie niet in waarom een negatieve long problemen op zou kunnen leveren. Desnoods neem je de absolute waard en gooi je die door je positieve algoritme. Door te kijken of het orgineel negatief was kun je kijken of het eerder of later is.
Idd. Zelf ook eens een Time class geschreven, werkte met een long die de (milli)seconden bijhield. Optellen, aftrekken, vermenigvuldigen zelfs, geen probleem.

Alleen de toString heeft dan idd wat meer aandacht nodig, dat je eerst de absolute waarde omvormt tot string en dan er evt een - voor plakt.


Calendar gaat denk ik niet werken omdat die werkt met absolute tijden en niet relatieve, wat jij dus wel wilt.

[ Voor 9% gewijzigd door Robtimus op 17-09-2004 12:48 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 23-06 16:04
IceManX schreef op 17 september 2004 @ 12:45:
[...]
Idd. Zelf ook eens een Time class geschreven, werkte met een long die de (milli)seconden bijhield. Optellen, aftrekken, vermenigvuldigen zelfs, geen probleem.

Alleen de toString heeft dan idd wat meer aandacht nodig, dat je eerst de absolute waarde omvormt tot string en dan er evt een - voor plakt.


Calendar gaat denk ik niet werken omdat die werkt met absolute tijden en niet relatieve, wat jij dus wel wilt.
Mag het eigenlijk niet vragen. Maar zou je het eens kunnen posten. Daar heb ik zeker wel wat aan.

Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 03-07 14:48

Robtimus

me Robtimus no like you

Als ik het nog heb, best. Maar volgens mij heb ik het weggegooid omdat het gewoon te eenvoudig was. Als ik thuis ben zal ik es kijken of ik nog ergens een backup heb dan.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • BurningSheep
  • Registratie: Januari 2000
  • Laatst online: 17-12-2024
Neptunus schreef op 17 september 2004 @ 12:09:
Dus 12:00 puls 01:00 = 13:00
Maar 01:00 min 12:00 = -11:00
Je drukt je een beetje vaag uit, maar waarschijnlijk heb je die hele calendar klasse niet nodig.

Waarom schrijf je 12:00 plus 1:00? Dit geeft de indruk dat het om tijdstippen gaat, terwijl je volgens mij een tijdsduur bedoelt.

Dus als je het zo opschrijft lijkt het me duidelijker:
12 uur + 1 uur = 13 uur
1 uur - 12 uur = -11 uur

Simpel rekenwerk dus...
Neptunus schreef op 17 september 2004 @ 12:09:
Als je 12:00 puls 23:00 krijg dat als antwoord 1 dag en 11:00
Ik neem aan dat je hier dan bedoelt dat je 12 uur + 23 uur = 35 uur = 1 dag en 11 uur

Lijkt me ook geen probleem, eerst uren bijelkaar optellen en vervolgens berekenen hoeveel dagen en uren dat inhoud.

Hint:
floor( 35 div 24 ) = 1
35 mod 24 = 11

Tenzij ik je verkeerd begrijp natuurlijk, maar probeer je dan eens wat beter uit te drukken en maak duidelijk onderscheid tussen tijdstippen en tijdsduren.

[ Voor 4% gewijzigd door BurningSheep op 17-09-2004 13:05 ]


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 03-07 14:48

Robtimus

me Robtimus no like you

BurningSheep schreef op 17 september 2004 @ 12:59:
Hint:
floor( 35 div 24 ) = 1
35 mod 24 = 11
div geeft automatisch al de naar beneden afgeronde versie terug, floor is dus overbodig.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • BurningSheep
  • Registratie: Januari 2000
  • Laatst online: 17-12-2024
Onafhankelijk van of dat waar is, is er niks mis mee om dat soort dingen expliciet te maken, en zeker niet met het oog op de TS.

[ Voor 19% gewijzigd door BurningSheep op 17-09-2004 16:38 ]


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 03-07 14:48

Robtimus

me Robtimus no like you

Kleine greep uit de class (ergens in een backup teruggevonden):
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class Time
{
    private long seconds;

    public Time(long secs)
    {
        seconds = secs;
    }

    public ArithmeticTime(Time time)
    {
        this.seconds = time.seconds;
    }

    public int hours()
    {
        return (int)(seconds / 3600);
    }

    public int minutes()
    {
        return (int)((seconds / 60) % 60);
    }

    public int seconds()
    {
        return (int)(seconds % 60);
    }

    public void add(long secs)
    {
        seconds += secs;
    }

    public void add(Time time)
    {
        add(time.seconds);
    }

    // sub, mult, etc zijn dan eenvoudig
}
De toString was alleen niet correct, behandelde negatieve tijden niet goed. Even opnieuw geschreven, kan dus bugs bevatten:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public String toString()
{
    long abs = (seconds < 0 ? -seconds : seconds);
    int hours = (int)(abs / 3600);
    int mins = (int)((abs / 60) % 60);
    int secs = (int)(abs % 60);
    StringBuffer buf = new StringBuffer();
    if (seconds < 0)
        buf.append('-');
    if (hours < 10)
        buf.append(0);
    buf.append(hours).append(':');
    if (mins < 10)
        buf.append(0);
    buf.append(mins).append(':');
    if (secs < 10)
        buf.append(0);
    return buf.append(secs).toString();
}
Zo krijg je mooie dingen als -05:05:05

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02 14:52
Allemaal overbodig. Calendar en GregorianCalendar hebben alle functionaliteit die je nodig hebt. Zoek de api docs maar eens op en kijk naar de add en roll functies. Die kunnen alles wat je nodig hebt, en meer.

[ Voor 4% gewijzigd door zneek op 17-09-2004 20:16 ]


Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 03-07 14:48

Robtimus

me Robtimus no like you

Kan die dan wel relatieve, en dus negatieve, tijden aan? Ik ken hem alleen als absolute tijden na 1 januari 1970.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02 14:52
IceManX schreef op 17 september 2004 @ 20:47:
Kan die dan wel relatieve, en dus negatieve, tijden aan? Ik ken hem alleen als absolute tijden na 1 januari 1970.
Ik weet zo 123 niet of die tijden van voor 1970 aan kan. Maar je kan er wel alle kanten mee op qua tijden, uren erbij, uren eraf. En je kunt redelijk simpel het verschil tussen 2 tijden bepalen.

  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 03-07 12:59
ik weet ook niet waarom je alles zelf opnieuw aan het schrijven bent, maar zoals eerder vermeld biedt Calendar de nodige functionaliteit, kijk naar de add / roll / set functies ...

offtopic:
wat handiger zou zijn is een Calender die geschikt is voor bedrfijfswereld, waar enkel rekening gehouden wordt met werkdagen en en werkuren.

ik heb ooit vlug zo'n klasse uitbreiding geschreven, maar is nooit grondig getest geweest, maar volgens mij moet die wel al ooit door iemand anders geschreven zijn... iemand enig idee waar eventueel te vinden ?

"Live as if you were to die tomorrow. Learn as if you were to live forever"


  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 03-07 15:27
IceManX schreef op 17 september 2004 @ 20:47:
Kan die dan wel relatieve, en dus negatieve, tijden aan? Ik ken hem alleen als absolute tijden na 1 januari 1970.
Data van voor 1970 is geen probleem. Negatieve tijden bestaan niet. Maar je kan vrij eenvoudig het verschil tonen tussen twee data, door alle velden die je nodig hebt af te lopen en te vergelijken. De negatieve tijd die jij bedoeld is in principe gewoon de hoeveelheid tijd voor een gekozen startdatum en tijd.

Acties:
  • 0 Henk 'm!

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 23-06 16:04
BurningSheep schreef op 17 september 2004 @ 12:59:
[...]


Je drukt je een beetje vaag uit, maar waarschijnlijk heb je die hele calendar klasse niet nodig.

Waarom schrijf je 12:00 plus 1:00? Dit geeft de indruk dat het om tijdstippen gaat, terwijl je volgens mij een tijdsduur bedoelt.

Dus als je het zo opschrijft lijkt het me duidelijker:
12 uur + 1 uur = 13 uur
1 uur - 12 uur = -11 uur

Simpel rekenwerk dus...

Tenzij ik je verkeerd begrijp natuurlijk, maar probeer je dan eens wat beter uit te drukken en maak duidelijk onderscheid tussen tijdstippen en tijdsduren.
Ik heb me zo uitgedrukt omdat ik een verschil in tijdsduur wil berekenen tussen twee tijdstippen. Dus tijdstip A + of - A = C En dan C in tijdsduur.

Maar zal eens naar de verschillende tips kijken die gegeven zijn. Laat nog van me horen en zal code posten als ik iets klaar heb.
Pagina: 1