[英]java.util.date/Calendar/SimpleDateFormat: Adding/Incrementing the months in java
[英]java.util.Date - Deleting three months from a date?
我有一個日期為java.util.Date
的日期
我想從中減去三個月。
在API中找不到很多樂趣。
這是普通的JDK版本,它需要Calendar
類作為幫助器:
Date referenceDate = new Date();
Calendar c = Calendar.getInstance();
c.setTime(referenceDate);
c.add(Calendar.MONTH, -3);
return c.getTime();
但是,由於Date
和Calendar
類的各種缺點,您應該認真考慮使用Joda庫 。 使用Joda,您可以執行以下操作:
new DateTime().minusMonths(3).toDate();
或者,如果您要從給定日期而不是當前日期中減去:
new DateTime(referenceDate).minusMonths(3).toDate();
Java 8更新:使用Java 8,您還可以使用新的JSR 310 API(受Joda的啟發):
LocalDateTime.from(referenceDate.toInstant()).minusMonths(3);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MONTH, -3);
使用setTime
方法設置日期。
我總是推薦Joda這樣的東西。 它具有更好的API,並且不會遭受標准Java日期/時間所具有的線程問題(例如, SimpleDateFormat
或常規可變性問題)的困擾。
例如
DateTime result = dt.minusMonths(3);
Date類本身是不夠的(+:您必須在這里使用Calendar類
這些東西
GregorianCalendar lCalendar = new GregorianCalendar();
lCalendar.setTime( aDate );
lCalendar.add(Calendar.MONTH, -3);
ps以上代碼段未經測試可編譯。
public static Date getDateMonthsAgo(int numOfMonthsAgo)
{
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.MONTH, -1 * numOfMonthsAgo);
return c.getTime();
}
將返回過去X個月的日期。 同樣,這是一個返回過去X天的日期的函數。
public static Date getDateDaysAgo(int numOfDaysAgo)
{
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.DAY_OF_YEAR, -1 * numOfDaysAgo);
return c.getTime();
}
您想今天-3個月格式化為dd MMMM yyyy
SimpleDateFormat format = new SimpleDateFormat("dd MMMM yyyy");
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.MONTH, -3);
Date d = c.getTime();
String res = format.format(d);
System.out.println(res);
因此,這段代碼可以完成工作;)
可以使用java.sql.Date(java.util.Date的子類)和JDK的8 LocalDate幫助您在一行中完成;)
Date date = java.sql.Date.valueOf(LocalDate.now().minus(3, ChronoUnit.MONTHS));
使用Java 8,您可以這樣做,
Date d = Date.from(LocalDate.now().minusMonths(3).atStartOfDay(ZoneId.systemDefault()).toInstant());
LocalDate
類有很多方法可幫助您像上述那樣輕松地計算日期,
// Add 2 months
Date d = Date.from(LocalDate.now().plusMonths(2).atStartOfDay(ZoneId.systemDefault()).toInstant());
// Add 5 days
Date d = Date.from(LocalDate.now().plusDays(5).atStartOfDay(ZoneId.systemDefault()).toInstant());
// Minus 1 day and 1 year
Date d = Date.from(LocalDate.now().minusYears(1).minusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
為了計算時間,您可以使用LocalDateTime
類,
// Minus 1 year, minus 1 days, plus 1 hour
Date d = Date.from(LocalDateTime.now().minusYears(1).minusDays(1).plusHours(1).toLocalDate().atStartOfDay(ZoneId.systemDefault()).toInstant());
您可以使用Apache Commons Lang3 DateUtils addMonths函數。
static Date addMonths(Date date, int amount)
向返回新對象的日期添加月份數。 原始日期保持不變。 添加的數量可能為負 ,所以您可以追溯3個月。
您可以使用
Date d1 = new Date()
d1.setMonth(d1.month-3)
希望這可以幫助
字符串startDate =“ 15/10/1987”;
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(startDate);
String formattedDate = new SimpleDateFormat("yyyy-MM-dd").format(date);
LocalDate today = LocalDate.parse(formattedDate);
String endDate=today.minusMonths(3).toString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.