正確に言うと自分で作ったのではなく、AirframeというScalaライブラリに相対時間で表記した期間をパースしてくれる機能があるのですが、わけあってこれをJavaにポーティングしてみました。
Maven Centralにdeployしてあるのでpom.xmlに以下の依存関係を追加すれば使えます。
<dependencies> <dependency> <groupId>com.github.takezoe</groupId> <artifactId>jtimewindow</artifactId> <version>1.0.0</version> </dependency> </dependencies>
実際の使い方はこんな感じです。オフセットは基準となる現在日時で、指定しなかった場合はシステム日付が使用されます。期間はZonedDateTime
だけでなくInstant
やエポックタイムで取得することもできます。
import com.github.takezoe.jtimewindow.*; TimeWindowBuilder t = TimeWindow .withTimeZone("PDT") .withOffset("2016-06-26 01:23:45-0700"); TimeWindow w = t.parse("-7d"); ZonedDateTime start = w.getStart(); ZonedDateTime end = w.getEnd();
READMEからの抜粋ですが、以下のような感じで簡潔かつ柔軟な表記が可能です(結果は現在時刻を2016-06-26 01:23:45-0700
に設定した場合の例です)。
Duration | Definition | start | end (exclusive) |
---|---|---|---|
0h |
this hour | 2016-06-26 01:00:00-0700 |
2016-06-26 02:00:00-0700 |
0d |
today | 2016-06-26 00:00:00-0700 |
2016-06-27 00:00:00-0700 |
0M |
this month | 2016-06-01 00:00:00-0700 |
2016-07-01 00:00:00-0700 |
-1h |
last hour | 2016-06-26 00:00:00-0700 |
2016-06-26 01:00:00-0700 |
-1h/now |
last hour to now | 2016-06-26 00:00:00-0700 |
2016-06-26 01:23:45-0700 |
-60m/2017-01-23 01:23:45 |
last 60 minutes to now | 2017-01-23 00:23:00-0700 |
2017-01-23 01:23:45-0700 |
-1d |
last day | 2016-06-25 00:00:00-0700 |
2016-06-26 00:00:00-0700 |
-7d |
last 7 days | 2016-06-19 00:00:00-0700 |
2016-06-26 00:00:00-0700 |
-7d/now |
last 7 days to now | 2016-06-10 00:00:00-0700 |
2016-06-26 01:23:45-0700 |
-3d/2017-04-07 |
last 3 days from a given offset | 2017-04-04 00:00:00-0700 |
2017-04-07 00:00:00-0700 |
+7d |
next 7 days (including today) | 2016-06-26 00:00:00-0700 |
2016-07-03 00:00:00-0700 |
+7d/now |
next 7 days from now | 2016-06-26 01:23:45-0700 |
2016-07-03 00:00:00-0700 |
-1w |
last week | 2016-06-13 00:00:00-0700 |
2016-06-20 00:00:00-0700 |
-1M |
last month | 2016-05-01 00:00:00-0700 |
2016-06-01 00:00:00-0700 |
-1y |
last year | 2015-01-01 00:00:00-0700 |
2016-01-01 00:00:00-0700 |
-1h/2017-01-23 01:00:00 |
last hour to a given offset | 2017-01-23 00:00:00-0700 |
2017-01-23 01:00:00-0700 |
-1h/2017-01-23 01:23:45 |
last hour to a given offset | 2017-01-23 00:00:00-0700 |
2017-01-23 01:23:45-0700 |