[Java] om 12 uur 's is HOUR_OF_DAY -> 0

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • zoutepopcorn
  • Registratie: September 2007
  • Laatst online: 24-05-2023
Ben even met een java proggie.

Ik heb daarbij de java Calendar gebruikt. Daarbij wil ik met een methode het uur weergeven (24 uurs weergave). Dat werkt redelijk goed, één probleem:
12 uur 's middags en 12 uur 's nachts geven beide 0 als output. Ik kan alleen op deze tijden niet zien of het nou dag of nacht is.

Verkorte weergave code
Java: filename
1
2
3
4
5
6
 
private Calendar cal = Calendar.getInstance();
// .....

int uur = cal.get(Calendar.HOUR_OF_DAY);
System.out.println("Uur: " + uur);


Testen die ik gedaan heb:

Tijd Calendar >> 23:00
Output: Uur: 23

Tijd Calendar >> 00:00
Output Uur: 00

Tijd Calendar >> 12:00
Output Uur: 00

O ja, de vraag is dus. Weet iemand hoe ik die 12 tevoorschijn kan toveren 8)7

[ Voor 5% gewijzigd door zoutepopcorn op 20-10-2011 20:59 ]


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Engelse notitie van tijd is 12 uur, in PHP kan je dat aangeven, kan me niet voorstellen dat zoiets er niet zou zijn voor Java. :) Als je 23 invult, kan dat dus alleen de niet-Engelse tijd zijn.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:12

Creepy

Tactical Espionage Splatterer

HOUR_OF_DAY zou je altijd 0-23 moeten teruggeven. Dus 12 uur 'smiddags zou 12 en niet 0 moeten zijn. Wil je meer met date formatting doen kjik dan bijv eens naar de SimpleDateFormat

Wat jij zegt (dat 12 uur 's middag toch een 0 teruggeeft) kan niet. Zie http://download.oracle.co...i/java/util/Calendar.html
public static final int HOUR_OF_DAY
Field number for get and set indicating the hour of the day. HOUR_OF_DAY is used for the 24-hour clock. E.g., at 10:04:15.250 PM the HOUR_OF_DAY is 22.

[ Voor 49% gewijzigd door Creepy op 20-10-2011 21:07 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • zoutepopcorn
  • Registratie: September 2007
  • Laatst online: 24-05-2023
CptChaos,

Bedankt voor de snelle reactie.

Dit is al een 24 uurs notatie. Anders had ik Calendar.HOUR kunnen gebruiken, wat volgens andere weer afgeraden werd. Ik zou het eventueel met 12 uurs notatie op kunnen lossen, maar vind ik een wat slordige oplossing.

Ik stamp hem dus met een Date in de Calendar class:
Java:
1
2
3
4
5
private Date voorgeleiding = null;
// ..
// Date voorgeleiding wordt ingevuld
// ..
cal.setTime(voorgeleiding);


En vervolgens kan ik volgens de Java documentatie hem er weer uithalen met 24 met Calendar.HOUR_OF_DAY

Acties:
  • 0 Henk 'm!

  • zoutepopcorn
  • Registratie: September 2007
  • Laatst online: 24-05-2023
@Creepy

Dank je. Had die doc ook al een paar keer gelezen, dat voorbeeld werkt.
Alles werkt alleen bij 12 uur 's middags werkt het blijkbaar niet. Ik ga nog even een kale versie schrijven dan post ik die met de output

Acties:
  • 0 Henk 'm!

  • zoutepopcorn
  • Registratie: September 2007
  • Laatst online: 24-05-2023
Okido even voor de duidelijkheid een kale versie van mijn prog.

Apl
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.*; 
public class Apl {
    
    public static void main(String kak[]) {
        Tijd eenUurNacht = new Tijd();
        eenUurNacht.setDatumEnTijd("20102011", "0100"); // 20 oktober 2011   om 01:00 uur
        Tijd eenUurDag = new Tijd();
        eenUurDag.setDatumEnTijd("20102011", "1300");   // 13:00 uur
        Tijd tweeUurDag = new Tijd();
        tweeUurDag.setDatumEnTijd("20102011", "1400");  // 14:00 uur
        
        // Hier gaat het dus mis alleen om 12 uur 's middags
        Tijd twaalfUurDag = new Tijd();
        twaalfUurDag.setDatumEnTijd("20102011", "1200"); // 12:00       
    }
    
}
 



Test
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
import java.util.*; 
import java.text.*; 
import java.util.Calendar;

public class Tijd {
    private DateFormat dfm = new SimpleDateFormat("ddMMyyyyhhmm");
    private Calendar cal = Calendar.getInstance();
    private Date voorgeleiding = null;
    
    public void setDatumEnTijd(String datum, String tijd) {
        voorgeleiding = parseDate(datum + tijd, dfm);
        cal.setTime(voorgeleiding);
        int uur = cal.get(Calendar.HOUR_OF_DAY);
        System.out.println("Het uur is " + uur);
        
    }
    
    private Date parseDate(String parse, DateFormat d) {
        Date date = null; 
        try {
            date = d.parse(parse);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }   
}
 


De output van het programma:
Het uur is 1 (input 01:00)
Het uur is 13 (input 13:00)
Het uur is 14 (input 14:00)
Het uur is 0 (input 12:00)

Het rare is dus dat hij 12 uur niet pakt, alles behalve 12 uur...

[ Voor 80% gewijzigd door zoutepopcorn op 20-10-2011 21:30 ]


Acties:
  • 0 Henk 'm!

  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-06 13:00
Je moet hem niet parsen met hh, maar met HH. hh = 12 uurs notatie, HH is de 24 uurs variant :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

CptChaos schreef op donderdag 20 oktober 2011 @ 20:59:
Engelse notitie van tijd is 12 uur, in PHP kan je dat aangeven, kan me niet voorstellen dat zoiets er niet zou zijn voor Java. :) Als je 23 invult, kan dat dus alleen de niet-Engelse tijd zijn.
Zelfs in de Engelse notatie zou het 12 uur moeten zijn, want die loopt van 0 tot 12, niet van 0 tot 11. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • zoutepopcorn
  • Registratie: September 2007
  • Laatst online: 24-05-2023
Werkend en wel. Was uit frustratie maar met een ander programma aan de gang gegaan.

Perfecto. Bedankt rrrandy!!! Tja die hoofletters in Java blijven je altijd de das om doen he :D. Toch typisch dat hij dan alleen die 12 niet pakt ga ik eens over nadenken.

Acties:
  • 0 Henk 'm!

  • zoutepopcorn
  • Registratie: September 2007
  • Laatst online: 24-05-2023
Kon het niet laten om nog even een bericht te posten, maar het zou verboden moeten worden die AM en PM.

Bedankt allen.

Sorry voor de dubbele posten en de onzinnige opmerking van de Java hoofdletter. Had al een paar biertjes op 8)7. Zal me voortaan aan de regels letten.

[ Voor 39% gewijzigd door zoutepopcorn op 22-10-2011 00:22 . Reden: sorry ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gebruik de edit knop ( Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/edit.gif ) als je iets toe te voegen hebt; je topic herhaaldelijk omhoogschoppen is niet nodig en die melding staat er niet voor niets:

Afbeeldingslocatie: http://tweakers.net/ext/f/93OGDVn8zio6RrIck1qYj8ne/full.png

;)

Having said dat: het is toch behoorlijk gangbaar dat er een verschil tussen hh en HH is; dat heeft geen drol met 'hoofdletters in Java' te maken, maar met 't gebrek aan, of slecht lezen van, documentatie te maken ;)
zoutepopcorn schreef op donderdag 20 oktober 2011 @ 21:48:
Toch typisch dat hij dan alleen die 12 niet pakt
Volgens de documentatie zou hh alleen 1 t/m 12 terug mogen geven; als er 0 uit komt is daar iets mis mee IMHO (ik kan er zo snel, in de betreffende documentatie iig, niets over vinden). Enkel voor 'K' zou 0-11 gelden.

[edit]
Ah, dit zou wel eens de boosdoener kunnen zijn; hoewel ik dan nog steeds niet vind kunnen dat iets dat "garandeert" enkel 1-12 terug te geven (of een exception of...) 0 teruggeeft.

IANAJG, dus 't kan aan mij liggen :P
NMe schreef op donderdag 20 oktober 2011 @ 21:40:
[...]

Zelfs in de Engelse notatie zou het 12 uur moeten zijn, want die loopt van 0 tot 12, niet van 0 tot 11. ;)
Van 1 tot 12; en Java being Java kent dus ook een 0 tot 11 "mode" voor uren, net zoals Januari maand 0 is (docs) (wat overigens ook voor JS en nog wel wat talen/dialecten geldt).

[ Voor 30% gewijzigd door RobIII op 21-10-2011 01:59 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-06 13:00
RobIII schreef op vrijdag 21 oktober 2011 @ 01:09:

Ah, dit zou wel eens de boosdoener kunnen zijn; hoewel ik dan nog steeds niet vind kunnen dat iets dat "garandeert" enkel 1-12 terug te geven (of een exception of...) 0 teruggeeft.
Dat is ook de verklaring waarom 13 en 14 wel geparst worden naar resp. 13:00 en 14:00. Wilde het voor de zekerheid nog even testen, maar ja, je kan de topic starter ook niet alles voorkauwen natuurlijk.

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 21:38
RobIII schreef op vrijdag 21 oktober 2011 @ 01:09:
[...]

Volgens de documentatie zou hh alleen 1 t/m 12 terug mogen geven; als er 0 uit komt is daar iets mis mee IMHO (ik kan er zo snel, in de betreffende documentatie iig, niets over vinden). Enkel voor 'K' zou 0-11 gelden.
De 'hh' zat bij het parsen, dus zou hij alleen 1 t/m 12 moeten accepteren (maar voor 13 en 14 is het nu ook verklaard). Ik neem aan dat 12 bij hh zonder am/pm-indicatie als am opgepakt wordt. Dat is dus 0:00 in 24 uursweergave en die 24 uursweergave is wat er met cal.get(Calendar.HOUR_OF_DAY) gevraagd wordt.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
RobIII schreef op vrijdag 21 oktober 2011 @ 01:09:
Volgens de documentatie zou hh alleen 1 t/m 12 terug mogen geven; als er 0 uit komt is daar iets mis mee IMHO (ik kan er zo snel, in de betreffende documentatie iig, niets over vinden). Enkel voor 'K' zou 0-11 gelden.
Volgens mij alleen als hij HOUR ipv HOUR_OF_DAY had gebruikt.
Pagina: 1