我使用Gregorian日历将特定日期和时间设置为使用Gregorian日历的设置功能。当我使用getTime()方法时,它为我提供了正确的输出,但是当我尝试访问hour_of_day和Minute时,它给出了错误的数字。

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

小时的输出为11,分钟的值为12。
对于如何解决这个问题,有任何的建议吗?谢谢

有帮助吗?

解决方案

您的代码只是将小时/分钟分配给常数。您需要致电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

使用现代Java.取代那些麻烦的旧旧日期时间类的时间课程更容易。

ZonedDateTime 类代表特定时区的时间轴上的瞬间,该时区的分辨率分辨率为纳秒。

从您的转换 GregorianCalendar 使用添加到旧类中的新方法。

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;

或没有任何新鲜 GregorianCalendar 班级。

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

如果您只想仅使用日期部分,请提取 LocalTime.

LocalTime localTime = zdt.toLocalTime() ;

如果您真的想要整数的时间和分钟数分钟,则可以对这些数字进行审问。

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

关于Java.Time

Java.Time 框架内置在Java 8及以后的框架中。这些班级取代了麻烦的旧 遗产 日期时间课,例如 java.util.Date, Calendar, & SimpleDateFormat.

乔达时间 项目,现在 维护模式, ,建议迁移到 Java.Time 课程。

要了解更多,请参阅 Oracle教程. 。并搜索堆栈溢出以获取许多示例和解释。规格是 JSR 310.

从哪里获得Java.Time课程?

Threeten-Extra 项目扩展Java.Time提供其他类。该项目是可能将来在Java.Time中增加的遗嘱。您可能在这里找到一些有用的课程,例如 Interval, YearWeek, YearQuarter, , 和 更多的.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top