Answers:
尝试使用Joda Time代替标准的java.util.Date类。Joda Time库具有更好的API处理日期。
DateTime dt = new DateTime(); // current time
int month = dt.getMonth(); // gets the current month
int hours = dt.getHourOfDay(); // gets hour of day
有关使用Joda Time库的优缺点,请参见此问题。
Joda Time也可能作为标准组件包含在Java的某些将来版本中,请参阅JSR-310。
如果必须使用传统的java.util.Date和java.util.Calendar类,请参见其JavaDoc以获得帮助(java.util.Calendar和java.util.Date)。
您可以使用类似的传统类从给定的Date实例中获取字段。
Date date = new Date(); // given date
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(date); // assigns calendar to given date
calendar.get(Calendar.HOUR_OF_DAY); // gets hour in 24h format
calendar.get(Calendar.HOUR); // gets hour in 12h format
calendar.get(Calendar.MONTH); // gets month number, NOTE this is zero based!
从Javadoc中获取Date.getHours
As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)
所以用
Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);
和getMinutes的等效项。
ZonedDateTime
改用。
当我是Joda-Time的爱好者时,Java 8引入了java.time软件包,这最终是一个有价值的Java标准解决方案!阅读本文,Java SE 8日期和时间,以获取小时和分钟以外的大量有关java.time的信息。
特别是看LocalDateTime
课。
小时和分钟:
LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();
LocalDateTime.now(ZoneId.of("Asia/Manilla"))
。now()
为了保持一致性,只读取一次(两个调用之间会经过时间)。如果日期确实无关紧要,LocalTime
也可以使用。
ZonedDateTime
class而不是LocalDateTime
。这样一来,LocalDateTime
您就无缘无故地丢弃了宝贵的时区信息,却一无所获。
ZonedDateTime.now().getHour()
… 要么 …
LocalTime.now().getHour()
ZonedDateTime
JD的答案是好的,但不是最佳的。该答案使用LocalDateTime
该类。缺少任何时区或UTC偏移量的概念,该类不能表示一个时刻。
更好地使用ZonedDateTime
。
ZoneId z = ZoneID.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
如果省略该ZoneId
参数,则会在运行时使用JVM的当前默认时区隐式应用该参数。
所以这:
ZonedDateTime.now()
…与此相同:
ZonedDateTime.now( ZoneId.systemDefault() )
最好明确一点,超过您希望的/预期的时区。默认值可以在运行时随时更改。
如果紧急,请与用户确认时区。
询问ZonedDateTime
小时和分钟。
int hour = zdt.getHour() ;
int minute = zdt.getMinute() ;
LocalTime
如果您只需要没有时区的时间,请提取LocalTime
。
LocalTime lt = zdt.toLocalTime() ;
或ZonedDateTime
完全跳过,直接转到LocalTime
。
LocalTime lt = LocalTime.now( z ) ; // Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).
该java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要类。java.sql.*
在哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可以在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,和更多。
尝试日历。使用getInstance获取日历对象。然后使用setTime设置所需的日期。现在,您可以将get(int字段)与适当的常量(例如HOUR_OF_DAY)一起使用,以读取所需的值。
http://java.sun.com/javase/6/docs/api/java/util/Calendar.html
获取分钟和小时的另一种方法是使用SimpleDateFormat。
SimpleDateFormat formatMinutes = new SimpleDateFormat("mm")
String getMinutes = formatMinutes.format(new Date())
SimpleDateFormat formatHours = new SimpleDateFormat("HH")
String getHours = formatHours.format(new Date())
java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在的遗产,由取代java.time内置到Java 8和更高等级。请参见Oracle 教程。
我建议您查看广告Joda时间。 http://www.joda.org/joda-time/
我很怕在自己的稠密项目中添加另一个库,但这很容易,快速,聪明又棒。另外,在某种程度上,它可以与现有代码配合使用。
java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在的遗产,由取代java.time内置到Java 8和更高等级。请参见Oracle 教程。