Java:getMinutes和getHours


Answers:


171

尝试使用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.Calendarjava.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!

2
问题:既然Java 8已在LocalDateTime中推出,您是否有任何理由应该在LocalDateTime上使用Joda Time?
chrips'Apr

@Chrips意见不同。Joda-Time正式建议改为使用java.time。
Ole VV

96

从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的等效项。


6
那么...如果我想从与现在不对应的日期中获取小时数,该如何工作?
迈克尔


几年前,这个可怕的类被现代的java.time类所取代,并采用了JSR310。请ZonedDateTime改用。
罗勒·布尔克

58

java.time

当我是Joda-Time的爱好者Java 8引入了java.time软件包,这最终是一个有价值的Java标准解决方案!阅读本文,Java SE 8日期和时间,以获取小时和分钟以外的大量有关java.time的信息。

特别是看LocalDateTime课。

小时和分钟:

LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();

4
这是最好的答案。您可能需要提供明确的时区,以提醒读​​者和您自己,这是时区敏感的操作:LocalDateTime.now(ZoneId.of("Asia/Manilla"))now()为了保持一致性,只读取一次(两个调用之间会经过时间)。如果日期确实无关紧要,LocalTime也可以使用。
Ole VV

1
这次真是万分感谢。我已经以某种方式错过了这个很棒的内置类很长时间了!
chrips'Apr

Ole VV的评论是正确的。但更好的是,使用ZonedDateTimeclass而不是LocalDateTime。这样一来,LocalDateTime您就无缘无故地丢弃了宝贵的时区信息,却一无所获。
罗勒·布尔克

如果您不必向后兼容,则很有用。遗憾的是,如果您正在为Android编写并支持较旧的API版本(或在Java 8并非总是可用的任何其他情况下),则不合适。
M_M

@M_M对于Java 6和7,大多数java.time功能都在ThreeTen-Backport库中向后移植。在ThreeTenABP中进一步适应了早期的Android 。有关链接,请参见“ 答案”的最后一部分。
罗勒·布尔克

36

首先,导入java.util.Calendar

Calendar now = Calendar.getInstance();
System.out.println(now.get(Calendar.HOUR_OF_DAY) + ":" + now.get(Calendar.MINUTE));

12

tl; dr

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.time与旧版中日期时间类的类型表。


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和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中添加内容提供了一个试验场。您可以在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,和更多



3
int hr=Time.valueOf(LocalTime.now()).getHours();
int minutes=Time.valueOf(LocalTime.now()).getMinutes();

这些函数将以小时和分钟为单位返回int值。


1
重复。JD答案已经涵盖了这种方法。
罗勒·布尔克

java.sql.Time吗 当然,在您上课之后,根本没有理由让过时的课程发挥作用java.time.LocalTime。您太复杂了。
Ole VV

看起来getMinutes()已弃用(我正在使用Java 1.8),并已替换为Calendar.get(Calendar.MINUTE)
Saltz3

3

获取分钟和小时的另一种方法是使用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.Datejava.util.Calendarjava.text.SimpleDateFormat现在的遗产,由取代java.time内置到Java 8和更高等级。请参见Oracle 教程
罗勒·布尔克

2

我建议您查看广告Joda时间。 http://www.joda.org/joda-time/

我很怕在自己的稠密项目中添加另一个库,但这很容易,快速,聪明又棒。另外,在某种程度上,它可以与现有代码配合使用。


1

尽管我不建议这样做,但我认为值得指出的是,尽管不赞成使用java.util.Date上的许多方法,但它们仍然可以工作。在琐碎的情况下,可以使用它们。而且,java.util.Calendar相当慢,因此getMonth和getYear on Date可能会更快地有用。


1
public static LocalTime time() {
    LocalTime ldt = java.time.LocalTime.now();

    ldt = ldt.truncatedTo(ChronoUnit.MINUTES);
    System.out.println(ldt);
    return ldt;
}

这对我有用


0

import java.util.*您可以使用日历和格式化程序类获取小时和分钟。Calendar cal = Calendar.getInstance()Formatter fmt=new Formatter()设置显示小时和分钟的格式fmt.format("%tl:%M",cal,cal),打印System.out.println(fmt) 输出显示如下10:12

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.