[英]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_DAY
和MINUTE
是公共靜態字段,旨在傳遞給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 ---------------;)
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )
.getMinute()
34
(如果當前時刻是2016-01-23T12:34:56.789-05:00 [美國/蒙特利爾])
其他答案是正確的。
執行此工作的現代方法是使用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 8及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.Date
, Calendar
和SimpleDateFormat
。
現在處於維護模式的Joda-Time項目建議遷移到java.time類。
要了解更多信息,請參閱Oracle教程 。 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310 。
從哪里獲取java.time類?
ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如Interval
, YearWeek
, YearQuarter
,和更多 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.