簡體   English   中英

使用Java的Date和Calendar類將分鍾轉換成一周的時間

[英]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類,而不是手動計算。

以下是一些示例輸入值:

  • 720(每周720分鍾),因此周日中午12點
  • 3840(每周3840分鍾),所以星期二下午4點

使用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

TL;博士

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .with( TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) )
         .atStartOfDay( ZoneId.of( "America/Montreal" ) )
         .plus( Duration.ofMinutes( 720 ) )

使用java.time

現代方法是使用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.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