[英]Addition and Subtraction of Dates in Java
我們如何在 java 中添加或減去日期? 例如java.sql.Date
格式如下: yyyy-MM-dd ,我如何從中添加 5 個月? 我在一些教程中看到他們正在使用Calendar
,我們可以在上面設置日期嗎? 請幫忙。
示例: 2012-01-01
添加 5 個月后將變為2012-06-01
。
PS:本人是.Net Programmer,正在慢慢學習Java環境。
首先,您必須將String
日期轉換為java.util.Date
,而不是必須使用java.util.Calendar
來操作日期。 也可以對毫秒進行數學運算,但是我不建議這樣做。
public static void main( final String[] args ) throws ParseException {
final String sdate = "2012-01-01";
final SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd" );
final Date date = df.parse( sdate ); // conversion from String
final java.util.Calendar cal = GregorianCalendar.getInstance();
cal.setTime( date );
cal.add( GregorianCalendar.MONTH, 5 ); // date manipulation
System.out.println( "result: " + df.format( cal.getTime() ) ); // conversion to String
}
清除用於日期數學的內置Date類。 看一下JodaTime,它對於此類事情具有更好的API。
使用Calendar
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 5);
要將日期轉換為日歷,請使用:
Date date = your_date_here;
Calendar cal = Calendar.getInstance();
cal.setTime(date);
然后使用日歷算術函數進行加/減:
cal.add(Calendar.MONTH, 5);
或者,將日期轉換為時間以毫秒為單位。 進行數學運算,然后將毫秒轉換回日期。
使用Google軟件包GWT中的CalenderUtils
。
import com.google.gwt.user.datepicker.client.CalendarUtil;
...
//now
Date d = new Date();
// Now + 2 months
CalendarUtil.addMonthsToDate(d, 2);
另一個選擇是來自第三方Apache Commons庫集合的DateUtils類。 例:
Date d = DateUtils.parseDate("2012-01-01", "yyyy-MM-dd");
Date d2 = DateUtils.addMonths(d, 5);
System.out.println("Old date + 5 months = " + d2);
有多種方法。 其中之一可能與joda.time 有關。 這不會通過使用Calendar來回答問題,而是在某人需要時使用另一種方法。 :D
import java.sql.Date;
import org.joda.time.DateTime;
//
DateTime datetime = new DateTime("2012-01-01");
Date dt = new Date(datetime.plusMonths(5).toDate().getTime());
System.out.println(dt);
// This gives output as 2012-06-01
PS:快樂編碼 Java
The accepted answer uses java.util
date-time API and SimpleDateFormat
which was the correct thing to do in 2012. In Mar 2014, the java.util
date-time API and their formatting API, SimpleDateFormat
were supplanted by the modern date-time API . 從那時起,強烈建議停止使用舊版日期時間 API。
java.time
的解決方案,現代日期時間 API: 您的日期字符串不需要DateTimeFormatter
: java.time
API 基於ISO 8601 ,因此您不需要指定DateTimeFormatter
來解析已經采用 ISO 8601 格式的日期時間字符串,例如您的日期字符串, 2012-01-01
可以直接解析為僅包含日期單位的LocalDate
實例。
將日期字符串解析為LocalDate
后,您可以對其添加或減去不同的日期單位,例如年、月、日等。
演示:
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
class Main {
public static void main(String args[]) {
LocalDate date = LocalDate.parse("2012-01-01");
System.out.println(date);
LocalDate afterFiveMonths = date.plusMonths(5);
LocalDate beforeFiveMonths = date.minusMonths(5);
System.out.println(afterFiveMonths);
System.out.println(beforeFiveMonths);
// Alternatively,
afterFiveMonths = date.plus(5, ChronoUnit.MONTHS);
beforeFiveMonths = date.minus(5, ChronoUnit.MONTHS);
System.out.println(afterFiveMonths);
System.out.println(beforeFiveMonths);
}
}
Output :
2012-01-01
2012-06-01
2011-08-01
2012-06-01
2011-08-01
從Trail:Date Time中了解有關現代日期時間 API 的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.