[英]Convert minutes into a week to time using Java's Date and Calendar classes
這是這種情況:給我一個值,該值代表一個標准周(假設每周10,080分鍾,每天1,440分鍾)中存在的分鍾總數的一部分,該時間從周六午夜開始(因此周日0分鍾@凌晨12點) 。
我需要將此分鍾值轉換為實際時間值(例如上午8:35),並且我想使用Java的Date和/或Calendar類,而不是手動計算。
以下是一些示例輸入值:
使用Java的Date和Calendar類,如何檢索相對日期的時間分量?
另外,使用日歷真的很容易:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
int minutesToAdd = 720;
Calendar cal = Calendar.getInstance();
cal.setTime(dateFormat.parse("2009/06/21 00:00:00")); // Next sunday
cal.add(Calendar.MINUTE, minutesToAdd);
Date result = cal.getTime(); // Voila
一天除以24小時即可得出天數。 剩余時間是當天的分鍾數。
除以60得到小時。 剩下的就是那小時。
只需幾行代碼,Division和Modulus就可以得到您的答案。 由於這聽起來像是作業,所以我將把編碼排除在這個答案之外。
聽起來像作業,這里應該如何工作:
1) Create yourself a calendar instance for sunday, 0:00 (on any date you wish)
2) Now add your minutes with the appropiate function
3) Now retrieve the time parts from the object
LocalDate.now( ZoneId.of( "America/Montreal" ) )
.with( TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) )
.atStartOfDay( ZoneId.of( "America/Montreal" ) )
.plus( Duration.ofMinutes( 720 ) )
現代方法是使用java.time類。
哪一周 我假設您想要本周的星期日。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z );
LocalDate sundayThisWeek = today.with( TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) );
獲取該日期的第一刻。 不要假定這表示00:00:00
因為諸如夏令時(DST)之類的異常可能意味着如01:00:00
這樣的其他時間。
ZonedDateTime zdt = sundayThisWeek.atStartOfDay( z ); // First moment of the day.
您說您得到了幾分鍾的輸入。 將該對象表示為Duration
對象。
Duration duration = Duration.ofMinutes( x );
將Duration
對象添加到您的ZonedDateTime
對象。
720(每周720分鍾),因此周日中午12點
不可以,720分鍾可能會導致一天中的其他時間,例如DST轉換日在美國的上午11點或下午1點。
這些對象為您完成所有數學運算,並處理諸如夏令時之類的異常。
ZonedDateTime zdtLater = zdt.plus( duration );
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.