Java日历时间,分钟是错误的

时间:2008-12-31 23:36:06

标签: java time

有人知道为什么java.util.Calendar中的MINUTE方法会返回错误的分钟吗?

import java.util.Calendar;

public class Clock
{
    // Instance fields
    private Calendar time;

    /**
     * Constructor. Starts the clock at the current operating system time
     */
    public Clock()
    {
       System.out.println(this.time.HOUR_OF_DAY+":"+this.time.MINUTE);
    }
}

4 个答案:

答案 0 :(得分:26)

Calendar.MINUTE不是实际的分钟,而是传递到“get()”以获取值的常量索引值。例如:

System.out.println(this.time.get(Calendar.HOUR_OF_DAY) + ":" + this.time.get(Calendar.MINUTE));

答案 1 :(得分:9)

HOUR_OF_DAYMINUTE是公共静态字段,旨在传递给Calendar#get(int)。通常,您希望在当前分钟使用Calendar.getInstance().get(Calendar.MINUTE)。但是,在您的示例中,您需要time.get(Calendar.MINUTE)

答案 2 :(得分:1)

import java.util.Calendar;

公共课时钟 {     //实例字段     私人日历时间;

/**
 * Constructor. Starts the clock at the current operating system time
 */
public Clock()
{
   time = Calendar.getInstance(); 
   System.out.println(this.time.get(Calendar.HOUR_OF_DAY) +
                       ":" + this.time.get(Calendar.MINUTE));
}

}

0 ---------------- --------------- ;)

答案 3 :(得分:0)

TL;博士

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )
             .getMinute()
  

34
(如果当前时刻是2016-01-23T12:34:56.789-05:00 [美国/蒙特利尔])

详细

其他答案是正确的。

java.time

这项工作的现代方法是使用java.time类来取代麻烦的旧遗留日期时间类。

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.now( z );  // zdt.toString(): 2016-01-23T12:34:56.789-05:00[America/Montreal]
int minute = zdt.getMinute();  // 34

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore