简体   繁体   中英

Ask Gregorian Calendar for hour of day in java

I'm using a Gregorian Calendar to set a specific date and time to an application using the set function of the Gregorian Calendar. When i use the getTime() method, it gives me the right output however when i try to access the Hour_Of_Day and Minute it gives a wrong number.

    Calendar time = new GregorianCalendar();
    time.set(2010, Calendar.JANUARY, 1, 7, 20,0);       
    hour = time.HOUR_OF_DAY;
    minute = time.MINUTE; 

The hour gives an output of 11 and the minute gives an a value of 12.
Any suggestions on how to fix this? Thanks

Your code is just assigning hour/minute to constants. You need to call Calendar.get(int):

hour = time.get(Calendar.HOUR_OF_DAY);
minute = time.get(Calendar.MINUTE);

tl;dr

myGregCal
    .toZonedDateTime()  // Convert from legacy class GregorianCalendar to modern ZonedDateTime.
    .getHour()          // Get hour-of-day, 0-23.

java.time

Much easier with the modern java.time classes that replace those troublesome old legacy date-time classes.

The ZonedDateTime class represents a moment on the timeline in a specific time zone with a resolution of nanoseconds.

Convert from your GregorianCalendar using new methods added to the old classes.

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;

Or start fresh without the GregorianCalendar class.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.of( 2010 , Month.JANUARY , 1 , 7 , 20 , 0 , 0 , z );

If you want to work with just the time-of-day portion, extract a LocalTime .

LocalTime localTime = zdt.toLocalTime() ;

If you really want the integer numbers of hours and minutes, you can interrogate for those.

int hour = zdt.getHour();
int minute = zdt.getMinute();

About java.time

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date , Calendar , & SimpleDateFormat .

The Joda-Time project, now in maintenance mode , advises migration to the java.time classes.

To learn more, see the Oracle Tutorial . And search Stack Overflow for many examples and explanations. Specification is JSR 310 .

Where to obtain the java.time classes?

The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval , YearWeek , YearQuarter , and more .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM