簡體   English   中英

Java日歷時間,分鍾是錯誤的

[英]Java calendar time, minute is wrong

有人知道為什么java.util.Caldendar中的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);
    }
}

Calendar.MINUTE不是實際的分鍾,而是傳遞到“get()”以獲取值的常量索引值。 例如:

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

HOUR_OF_DAYMINUTE是公共靜態字段,旨在傳遞給Calendar#get(int) 通常,您希望將Calendar.getInstance().get(Calendar.MINUTE)用於當前分鍾。 但是在你的例子中,你需要time.get(Calendar.MINUTE)

import java.util.Calendar;

公共類Clock {//實例字段私人日歷時間;

/**
 * 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 ---------------;)

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及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.DateCalendarSimpleDateFormat

現在處於維護模式Joda-Time項目建議遷移到java.time類。

要了解更多信息,請參閱Oracle教程 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310

從哪里獲取java.time類?

ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如IntervalYearWeekYearQuarter ,和更多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM