我想減去5天,從該進來作爲一個字符串開始的日期。爪哇 - 減去天從日期
我看過一些關於這個主題的其他帖子,但是我從代碼中得到的結果總是不正確的。主要的問題是,今年價值似乎沒有改變的時候,天相減,例如 - 2012-01-01 subtract 5 days gives me 'Jan 27 2012'
使用此代碼 -
cal.add(Calendar.DATE, -5);
請幫助。
我想減去5天,從該進來作爲一個字符串開始的日期。爪哇 - 減去天從日期
我看過一些關於這個主題的其他帖子,但是我從代碼中得到的結果總是不正確的。主要的問題是,今年價值似乎沒有改變的時候,天相減,例如 - 2012-01-01 subtract 5 days gives me 'Jan 27 2012'
使用此代碼 -
cal.add(Calendar.DATE, -5);
請幫助。
你知道嗎,在Java中,月份1
實際上是2月?
Date februaryTheFirst = new Date(2012,1,1); // equals 2012-02-01
這可能解釋你所看到的。如果你要實例2012-01-01相反,你應該做的:
Calendar.getInstance().set(2012,0,1); // 2012-01-01
一定要檢查的文檔Date(int, int, int)
和Calendar.set(int, int, int)
:
Date firstDayOf2012 = new Date(2012,0,1); // this is 2012-01-01
完全一樣的東西與Calendar
打交道時發生。此外,你可以檢查你解析字符串的方式。如果您使用SimpleDateFormat.parse(...)
,事情可能會更容易。
奇怪,不是嗎?去圖...正如一個有趣的事實,的IntelliJ的文檔註釋這第二個參數,月份,@MagicConstant
,要記住,有事情很奇怪的東西程序員。
用途:
cal.add(Calendar.DAY_OF_MONTH, -5)
編輯:對不起。 DAY_OF_MONTH
是DATE
的同義詞。而不是1
使用Calendar.JANUARY
。
Calendar.FEBRUARY是前1五天2012年2月1日爲27戳刺2012
該代碼段是工作在我的電腦。首先你必須讓日曆實例執行你的計算。
Calendar cal = Calendar.getInstance();
System.out.println("Today : " + cal.getTime());
// Subtract 300 days from the calendar
cal.add(Calendar.DATE, -300);
System.out.println("300 days ago: " + cal.getTime());
這是輸出,你會得到:
Today : Wed Oct 17 10:41:23 EET 2012
300 days ago: Thu Dec 22 10:41:23 EET 2011
你的實現是正確的,你得到正確的值ASLO。
Calendar
的月開始0
0 = Jan
1 = Feb
所以減去5 days
從2012-01-01
肯定會返回你Jan 27 2012
的東西在這裏也是這將有助於你Why is January month 0 in Java Calendar?
的Joda-Time 2.7庫使這項工作更容易。只需撥打minusDays
方法即可。
String input = "2012-01-01";
DateTimeZone zone = DateTimeZone.forID("America/Montreal");
DateTime dateTime = new DateTime(input, zone);
DateTime then = now.minusDays(5);
DateTimeFormatter formatter = DateTimeFormat.forStyle("FF").withZone(zone).withLocale(Locale.CANADA_FRENCH);
String output = formatter.print(then);
如果你想在一天的開始,添加一個調用withTimeAtStartOfDay
。在你的情況下,這是沒有必要的,當解析一個沒有時間的日期字符串時。
DateTime dateTimeAtStartOfDay = new DateTime(input, zone).withTimeAtStartOfDay();
如果你只想要日期沒有時間的日或時區,使用LocalDate
代替日期時間。
LocalDate then = new LocalDate("2012-01-01").minusDays(5);
如果你需要轉換到老java.util.Date,呼籲日期時間toDate
。
Java 8有一個新的包java.time。這些新課程受到Joda-Time的啓發,但被重新設計。 java.time和Joda-Time都可以很好地解決這個問題。
你如何解析字符串「2012-01-01」到「日曆」?我懷疑你有一個錯誤。 – Jesper