Gekkigheid het met tijd java

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Galinsky
  • Registratie: Oktober 2013
  • Niet online

Galinsky

--------->

Topicstarter
Hallo,

Ik heb een raar probleempje hier alvast de code eronder staat uitleg:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
//huidige tijd:     verlangde tijd(user input):
            //nSecond           calcSecond
            //nMinute           calcMinute
            //nHour             calcHour
            //nDay              calcDay
            //nMonth            calcMonth
            //nYear             calcYear
            
                if(calcSecond < nSecond){calcMinute--; calcSecond = calcSecond+60;}
                int diffSecond = calcSecond - nSecond;
                
                if(calcMinute < nMinute){calcHour--; calcMinute = calcMinute+60;}
                int diffMinute = calcMinute - nMinute;
                
                if(calcHour < nHour){calcDay--; calcHour = calcHour+24;}
                int diffHour = calcHour - nHour;
                
                if(calcDay < nDay){calcMonth--; 
                        int addDays=30;
                        if(calcMonth==0){addDays=31;}
                        if(calcMonth==1){addDays=28;}
                        if(calcMonth==2){addDays=31;}
                        if(calcMonth==3){addDays=30;}
                        if(calcMonth==4){addDays=31;}
                        if(calcMonth==5){addDays=30;}
                        if(calcMonth==6){addDays=31;}
                        if(calcMonth==7){addDays=31;}
                        if(calcMonth==8){addDays=30;}
                        if(calcMonth==9){addDays=31;}
                        if(calcMonth==10){addDays=30;}
                        if(calcMonth==11){addDays=31;}
                
                calcDay = calcDay+addDays;}
                int diffDay = calcDay - nDay;
                
                if(calcMonth < nMonth){calcYear--; calcMonth = calcMonth+12;}
                int diffMonth = calcMonth - nMonth;
                int diffYear = calcYear - nYear;
                
                
                
                
                
                
                String strDiffYear = "" + diffYear;
                String strDiffMonth = "" + diffMonth;
                String strDiffDay = "" + diffDay;
                String strDiffHour = "" + diffHour;
                String strDiffMinute = "" + diffMinute;
                String strDiffSecond = "" + diffSecond;
                
                String FinalDifference = "The difference is:\nYear: "+strDiffYear+"\nMonth: "+strDiffMonth+"\nDay: "+strDiffDay+"\nHour: "+strDiffHour+"\nMinute: "+strDiffMinute+"\nSecond: "+strDiffSecond;
                
            JOptionPane.showMessageDialog(null, FinalDifference);

De code ervoor doet er niet toe de huidige tijd(alle variables die met een n beginnen) geeft de exact huidige tijd. bijv: 52-31-20-13-03-2016 dit is op volgorde van de variables: second, minute, hour, day, month, year. Stel ik vul in bij user input 00-00-00-15-6-2016 in dan krijg ik deze verschillen/ variablen beginnend met diff:
second: 8 klopt
minute: 29 klopt niet
hour: 4 klopt ook niet
day: 2 klopt ook niet
month: 3 klopt
year: 0 klopt

het lijkt niet alsof hij niet doorrekent dus wanneer secondes 8 is dat hij dan niet bij minuten 29 maar 28 minuten moet doen terwijl dit er volgens mij wel in verwerkt is in mijn code.

Alle reacties


Acties:
  • 0 Henk 'm!

  • vdstaak
  • Registratie: Oktober 2015
  • Laatst online: 30-09 08:56
Heb je een speciale reden dat je niet met een simpele Date werkt? Dan kun je namelijk gewoon met .parse() je datum/tijd erin plakken en aan de hand van het aantal MS sinds epoch je dagen/uren/minuten eruit rekenen. Lijkt me ietsjes simpeler dan deze methode

Acties:
  • 0 Henk 'm!

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 13:35

mkleinman

8kWp, WPB, ELGA 6

Verder nog eenvoudiger om dit met Calendar te doen. Kwestie van setten en daarna kan je met add, seconden,minuten,uren etc erbij optellen en aftrekken

En als je externe libraries mag gebruiken is JodaTime ook een interessante.

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


Acties:
  • 0 Henk 'm!

  • Galinsky
  • Registratie: Oktober 2013
  • Niet online

Galinsky

--------->

Topicstarter
vdstaak schreef op zondag 13 maart 2016 @ 20:48:
Heb je een speciale reden dat je niet met een simpele Date werkt? Dan kun je namelijk gewoon met .parse() je datum/tijd erin plakken en aan de hand van het aantal MS sinds epoch je dagen/uren/minuten eruit rekenen. Lijkt me ietsjes simpeler dan deze methode
de reden is is dat ik graag mutaties erin wil maken.
mkleinman schreef op zondag 13 maart 2016 @ 20:50:
Verder nog eenvoudiger om dit met Calendar te doen. Kwestie van setten en daarna kan je met add, seconden,minuten,uren etc erbij optellen en aftrekken

En als je externe libraries mag gebruiken is JodaTime ook een interessante.
Ik gebruik Calendar ook om de huidige data te verkrijgen echter omdat ik er later mutaties erin wil maken heb ik het zo:
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd'-'HH-mm-ss")
split ik het doormiddel van de "-"
en geef dan elke split om het zo maar te noemen zijn eigen variable dus secondes hebben dan een eigen minutes heeft zijn eigen etc.

Acties:
  • 0 Henk 'm!

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 13:35

mkleinman

8kWp, WPB, ELGA 6

Galinsky schreef op zondag 13 maart 2016 @ 20:54:
[...]

de reden is is dat ik graag mutaties erin wil maken.


[...]

Ik gebruik Calendar ook om de huidige data te verkrijgen echter omdat ik er later mutaties erin wil maken heb ik het zo:
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd'-'HH-mm-ss")
split ik het doormiddel van de "-"
en geef dan elke split om het zo maar te noemen zijn eigen variable dus secondes hebben dan een eigen minutes heeft zijn eigen etc.
Maar waarom?

Je kan met:

code:
1
2
3
4
Calendar cal = Calendar.getInstance();

cal.add( Calendar.DAY_OF_MONTH,  - 1);  // substract one day.
cal.add( Calendar.YEAR,  - 1);  // substract one year.


Etc etc werkelijk waar alle berekeningen doen met Calendars die je wilt. Plus dat hij ook meteen minuten, uren, seconden etc allemaal meeneemt, inclusief schrikkeljaren, en als je wilt tijdzones.

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


Acties:
  • +1 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Ga niet zelf met datum en tijd software aan de slag, dit is een stuk complexer dan even dat optellen en aftrekken. Het lijkt allemaal heel simpel, maar in de praktijk is het complex genoeg om zelfs producten van multinationals nog problemen te laten hebben.

Acties:
  • 0 Henk 'm!

  • Galinsky
  • Registratie: Oktober 2013
  • Niet online

Galinsky

--------->

Topicstarter
mkleinman schreef op zondag 13 maart 2016 @ 21:01:
[...]


Maar waarom?

Je kan met:

code:
1
2
3
4
Calendar cal = Calendar.getInstance();

cal.add( Calendar.DAY_OF_MONTH,  - 1);  // substract one day.
cal.add( Calendar.YEAR,  - 1);  // substract one year.


Etc etc werkelijk waar alle berekeningen doen met Calendars die je wilt. Plus dat hij ook meteen minuten, uren, seconden etc allemaal meeneemt, inclusief schrikkeljaren, en als je wilt tijdzones.
Oke dan heb ik van de user input 6 verschillende strings namelijk sec min hour etc.. Die zet ik dan om in Calendar. En dan zou het allemaal moeten werken en kan ik er alles mee doen?

Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Galinsky schreef op zondag 13 maart 2016 @ 22:27:
[...]


Oke dan heb ik van de user input 6 verschillende strings namelijk sec min hour etc.. Die zet ik dan om in Calendar. En dan zou het allemaal moeten werken en kan ik er alles mee doen?
Ja.

Acties:
  • +1 Henk 'm!

  • mkleinman
  • Registratie: Oktober 2001
  • Laatst online: 13:35

mkleinman

8kWp, WPB, ELGA 6

Galinsky schreef op zondag 13 maart 2016 @ 22:27:
[...]


Oke dan heb ik van de user input 6 verschillende strings namelijk sec min hour etc.. Die zet ik dan om in Calendar. En dan zou het allemaal moeten werken en kan ik er alles mee doen?
Geen enkel probleem

code:
1
2
3
4
5
Calendar cal = Calendar.getInstance(); // default datetime

cal.set( Calendar.YEAR, 1999 ); // set year to 1999
cal.set( Calendar.MONTH, 0 ); // january = 0, december = 11.
cal.set( Calendar.MINUTE, 30);


https://docs.oracle.com/j...i/java/util/Calendar.html, daar staan alle mogelijkheden op die je kan gebruiken.

En dus met

code:
1
cal.add( <modifier>, amount );


kan je optellen en aftrekken met dagen,uren,minuten,jaren, etc.

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


Acties:
  • +3 Henk 'm!

  • Marber
  • Registratie: Juni 2014
  • Laatst online: 11-10 18:10
Kort filmpje dat heel goed uitlegt waarom je niet zelf aan de slag moet gaan met tijd/datum code:

YouTube: The Problem with Time & Timezones - Computerphile

Acties:
  • +1 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:49

Janoz

Moderator Devschuur®

!litemod

Ik zou je trouwens sowieso aan willen raden om java.time te gebruiken ipv Calendar en java.util.Date. En als je nog geen Java 8 kan gebruiken, zou ik jodaTime aan willen raden.

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!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 13:09

MueR

Admin Devschuur & Discord

is niet lief

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • epic007
  • Registratie: Februari 2004
  • Laatst online: 07-10 10:46
*nope*

[ Voor 95% gewijzigd door Creepy op 15-03-2016 16:28 ]


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 11:06
Marber schreef op maandag 14 maart 2016 @ 10:36:
Kort filmpje dat heel goed uitlegt waarom je niet zelf aan de slag moet gaan met tijd/datum code:

YouTube: The Problem with Time & Timezones - Computerphile
Vandaag nog een bug uit een applicatie gehaald. Ergens werd het weeknummer van een bepaalde datum opgevraagd en die liep een week voor. Blijkt dus de kalender instellingen op niet Nederlands te staan. Dan zit je er dus een week naast :) (of die kans heb je in ieder geval)

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

code:
1
  if(calcMonth==1){addDays=28;}


Ja goed idee inderdaad, om een vaste hoeveelheid dagen toe te wijzen aan een maand waar die hoeveelheid elke zoveel jaar varieert. (Notabene twee weken geleden gebeurd.)

Slimmere mensen dan jij maken hier fouten mee; gebruik alsjeblieft gewoon een standaard class.

[ Voor 27% gewijzigd door CyBeR op 15-03-2016 19:29 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Galinsky
  • Registratie: Oktober 2013
  • Niet online

Galinsky

--------->

Topicstarter
CyBeR schreef op dinsdag 15 maart 2016 @ 19:27:
code:
1
  if(calcMonth==1){addDays=28;}


Ja goed idee inderdaad, om een vaste hoeveelheid dagen toe te wijzen aan een maand waar die hoeveelheid elke zoveel jaar varieert. (Notabene twee weken geleden gebeurd.)

Slimmere mensen dan jij maken hier fouten mee; gebruik alsjeblieft gewoon een standaard class.
Ik weet het ik weet het! Het is puur om java onder de knie te krijgen het is niet dat het per se 1000% correct te hebben. Gewoon leuke simpele opdrachtjes voor mezelf bedenken. Het word verder niet gebruikt in professionele werksfeer of zoiets.

Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 09-10 01:21

Nick_S

++?????++ Out of Cheese Error

Er zijn een hoop gebieden, waarbij je erg goed moet opletten:
-Datum, tijd, tijdzones
-Money (gebruik geen double), Currency (omrekenen?)

Maar ook "simpelere" dingen, waar je (bijna) zeker de mist mee in gaat:
- Namen
- Adressen
- E-mail adressen
- Telefoonnummers
- Sekse

Validatie is niet het meest makkelijke onderwerp. :D (Afhankelijk van wat je wensen zijn, natuurlijk)

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • +1 Henk 'm!

  • Giesber
  • Registratie: Juni 2005
  • Laatst online: 08-10 16:19
Galinsky schreef op zondag 13 maart 2016 @ 20:45:

De code ervoor doet er niet toe de huidige tijd(alle variables die met een n beginnen) geeft de exact huidige tijd. bijv: 52-31-20-13-03-2016 dit is op volgorde van de variables: second, minute, hour, day, month, year. Stel ik vul in bij user input 00-00-00-15-6-2016 in dan krijg ik deze verschillen/ variablen beginnend met diff:
second: 8 klopt
minute: 29 klopt niet
hour: 4 klopt ook niet
day: 2 klopt ook niet
month: 3 klopt
year: 0 klopt

het lijkt niet alsof hij niet doorrekent dus wanneer secondes 8 is dat hij dan niet bij minuten 29 maar 28 minuten moet doen terwijl dit er volgens mij wel in verwerkt is in mijn code.
Ik dacht het probleem te zien, maar als ik het even naloop zou het toch moeten kloppen ja.
Maand en jaar zijn enigszins afwijkend omdat die niet kleiner zijn dan de huidige tijd, dus dat lijkt dan weer richting de statements binnen de if testen te wijzen.

Je kan dit best even met een debugger bekijken, dan zou je precies moeten kunnen volgen wat er mis gaat.

Ik zou ook even wat code conventions willen aanhalen. Het is niet gebruikelijk om in Java meerdere statements op een regel te zetten, of een statement op dezelfde regel na een "{" te zetten. Omdat het hier om korte statements gaat is het nog zeer leesbaar, maar weet dat dit niet gangbaar is in de Java wereld (net zoals het manueel gefoefel met datums). Geen probleem voor een leerprojectje uiteraard, ik probeer je ook gewoon wat bij te leren :+ .

P.S. Hoewel het kan horen variabelen volgens de standaarden niet met een hoofdletter te beginnen (FinalDifference). Weeral geen probleem met leesbaarheid hier, omdat de variabele meteen na de declaratie gebruikt wordt. Maar het doet pijn aan de ogen van veel developers :P .

Acties:
  • 0 Henk 'm!

  • Brent
  • Registratie: September 2001
  • Laatst online: 12:10
Galinsky schreef op dinsdag 15 maart 2016 @ 19:32:
[...]

Ik weet het ik weet het! Het is puur om java onder de knie te krijgen het is niet dat het per se 1000% correct te hebben. Gewoon leuke simpele opdrachtjes voor mezelf bedenken. Het word verder niet gebruikt in professionele werksfeer of zoiets.
Zelfs in de persoonlijke sfeer is stap 1 bij mij: wat bestaat er al? Het wiel hoeft niet opnieuw uitgevonden te worden ;)

Je kunt altijd de code van bijvoorbeeld jodatime doorlopen als je een bepaalde vraag hebt.

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Oh ja, maanden en hun dagen..... http://www.projectpluto.com/calendar.htm

Tijd is ook zo mooi:
Israel besloot elk jaar hoe de zomertijd er uit zou komen te zien.
Er is ook een eiland dat de tijdzone compleet heeft omgegooit.
Daarom is er de timezonedb

[ Voor 55% gewijzigd door DJMaze op 17-03-2016 15:37 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Galinsky
  • Registratie: Oktober 2013
  • Niet online

Galinsky

--------->

Topicstarter
weet iemand anders nog of er een goed platform is om java te leren?
Zelf heb ik al met bleuj en dat boek gewerkt en codecadamy zelf werk ik nu in ecliplse.
Ik weet het er is genoeg te vinden op internet maar misschien iemand die iets kan aanraden?

Acties:
  • 0 Henk 'm!

  • Manke
  • Registratie: Januari 2003
  • Niet online
Galinsky schreef op dinsdag 15 maart 2016 @ 19:32:
[...]

Ik weet het ik weet het! Het is puur om java onder de knie te krijgen het is niet dat het per se 1000% correct te hebben. Gewoon leuke simpele opdrachtjes voor mezelf bedenken. Het word verder niet gebruikt in professionele werksfeer of zoiets.
Zo leer je het wel.

Kijk eens naar de mod (%) operatie, misschien kan je er wat mee bij deze toepassing.

[ Voor 5% gewijzigd door Manke op 17-03-2016 23:36 ]

Pagina: 1