簡體   English   中英

java.util.Date-從日期刪除三個月?

[英]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();

但是,由於DateCalendar類的各種缺點,您應該認真考慮使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM