2012-01-04 177 views
7

我需要計算90天,120天和160天的幾個項目。我將如何編碼? 我一直在查找java代碼,但是當我爲android開發時會引發錯誤。如何從今天的日期減去x天的天數

我需要採取今天的日期,減去x的天數,並讓它的結果顯示在屏幕上沒有別的。由於

+2

你能更具體地瞭解產生它們的錯誤和代碼嗎? – ObscureRobot 2012-01-04 14:22:19

+0

[如何從使用Java日曆的日期中減去X天?](http://stackoverflow.com/questions/212321/how-to-subtract-x-days-from-a-date-using-java -calendar) – 2015-05-27 07:08:00

回答

18

您應該使用Calendar類:

//Calendar set to the current date 
Calendar calendar=Calendar.getInstance(); 
//rollback 90 days 
calendar.add(Calendar.DAY_OF_YEAR, -90); 
//now the date is 90 days back 
Log.i("MyApp","90 days ago:"+calendar.getTime().toString()); 
+0

roll()正在添加到字段中,而不是減量。但這是不正確的,因爲它不會改變更大的領域。請參閱http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html – nagylzs 2012-11-08 12:38:06

+0

你是對的。謝謝。將更新我的答案 – 2012-11-08 13:31:08

7

使用日曆對象...

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.DATE, -90); //etc 
0

TL;博士

LocalDate.now(ZoneId.of("America/Montreal")) 
     .minusDays(90) 

java.time

其他的答案在這裏已經過時。現代的方式是使用java.time類。

LocalDate

LocalDate類表示沒有時間一天和不同時區的日期,唯一的價值。

時區對確定日期至關重要。對於任何特定的時刻,日期因地區而異。例如,Paris France午夜後幾分鐘是新的一天,而在Montréal Québec仍然是「昨天」。

ZoneId z = ZoneId.of("America/Montreal") ; 
LocalDate today = LocalDate.now(z) ; 

然後,您可以添加或減去天數。

LocalDate ago090 = today.minusDays(90) ; 
LocalDate ago120 = today.minusDays(120) ; 
LocalDate ago160 = today.minusDays(160) ; 

要產生YYYY-MM-DD的標準ISO 8601格式的字符串,調用toString。對於其他格式,請在DateTimeFormatter類中搜索Stack Overflow以查看許多示例和討論。

String output = ago120.toString() ; 

關於java.time

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore

相關問題