在Java询问Gregorian日历一天中的一个小时
-
01-10-2019 - |
题
我使用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课程?
- Java SE 8 和 SE 9 然后
- 内置。
- 标准Java API的一部分,具有捆绑的实现。
- Java 9添加了一些次要功能和修复。
- Java SE 6 和 SE 7
- java的大部分功能都将后输入到Java 6&7 in Threeten-Backport.
- 安卓
- 这 三分 项目适应 Threeten-Backport (上面提到)专门针对Android。
- 看 如何使用Threetenabp….
这 Threeten-Extra 项目扩展Java.Time提供其他类。该项目是可能将来在Java.Time中增加的遗嘱。您可能在这里找到一些有用的课程,例如 Interval
, YearWeek
, YearQuarter
, , 和 更多的.