![](/img/trans.png)
[英]How to determine the time between now and an arbitrary future date in Java
[英]Java Date object shows time in the future
我要在當前時間之前的某個時間創建一個新的日期對象。 如果我要在今天前1天放映,效果很好。 但如果我想在30天前放映,那將是未來(?)
Date date = new Date();
long sometime = 24 * 60 * 60 * 1000; //a day
System.out.println(date.getTime() );
Date sometimeago = new Date(date.getTime() - sometime);
System.out.println(sometimeago );
sometime = 30* 24 * 60 * 60 * 1000; //a month
sometimeago = new Date(date.getTime() - sometime);
System.out.println(sometimeago );
輸出:
1408160853776
Thu Aug 14 20:47:33 PDT 2014
Thu Sep 04 13:50:21 PDT 2014
這里有什么限制? 達到長期限制?
int
文字的整數溢出,
在您的情況下, int
文字在之前被求值,結果為負,然后被賦給long
sometime = 30* 24 * 60 * 60 * 1000; //a month
這導致-1702967296
轉換成
sometime = 30* 24 * 60 * 60 * 1000L; //a month
注意: L
使它成為long
字面量,然后相乘
最好使用Calendar
類進行Date
操作
另請參閱
LocalDate.now()
.minusDays( 1 )
現代的java.time類提供了這些功能。
如果我要在今天前一天顯示,
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
LocalDate yesterday = today.minusDays( 1 ) ;
我想在30天前展示
LocalDate thirtyDaysAgo = today.minusDays( 30 ) ;
也許您想要一個合乎邏輯的月份,而不是三十天。
LocalDate monthAgo = today.minusMonths( 1 ) ;
也許您想要一個日期時間而不是一個僅日期值。
ZonedDateTime now = ZonedDateTime.now( z ) ;
ZonedDateTime zdtYesterday = now.minusDays( 1 ) ;
ZonedDateTime zdtThirtyDaysAgo = now.minusDays( 30 ) ;
ZonedDateTime zdtMonthAgo = now.minusMonths( 1 ) ;
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.