2010-04-24 28 views
3

我正在使用公历日历来为使用公历日历的设置功能的应用程序设置特定的日期和时间。当我使用getTime()方法时,它给了我正确的输出,但是当我尝试访问Hour_Of_Day和分钟时,它给出了错误的数字。在java中提供公历一小时日历

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

时针给出的11的输出和分给出的12
上如何解决这一问题的任何建议的值? 谢谢

+0

这是一个很好的。总是会返回11吗? : - )以下是更多信息:http://java.sun.com/javase/6/docs/api/java/util/Calendar.html – OscarRyz 2010-04-24 02:46:31

+0

仅供参考,麻烦的旧日期时间类,例如['java.util。日期'](https://docs.oracle.com/javase/9​​/docs/api/java/util/Date.html),['java.util.Calendar'](https://docs.oracle.com /javase/9​​/docs/api/java/util/Calendar.html)和'java.text.SimpleDateFormat'现在是[legacy](https://en.wikipedia.org/wiki/Legacy_system),由[Java时间](https://docs.oracle.com/javase/9​​/docs/api/java/time/package-summary.html)内置于Java 8和Java 9的类。请参见[Oracle指南]( https://docs.oracle.com/javase/tutorial/datetime/TOC.html)。 – 2018-02-01 06:24:01

回答

8

你的代码只是分配常量的小时/分钟。你需要调用Calendar.get(INT):

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

+1打我吧 – OscarRyz 2010-04-24 02:48:56

+0

完美的作品!谢谢 – 2010-04-24 09:27:09

0

TL;博士

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

java.time

与替换那些麻烦的老传统现代java.time类容易得多日期时间课程。

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和更高版本。这些类取代了日期时间类legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time项目现在位于maintenance mode,建议迁移到java.time类。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。规格是JSR 310

从何处获取java.time类?

ThreeTen-Extra项目与其他类扩展java.time。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval,YearWeek,YearQuartermore