Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.util.Date-从日期中删除三个月?_Java - Fatal编程技术网

java.util.Date-从日期中删除三个月?

java.util.Date-从日期中删除三个月?,java,Java,我的日期类型为java.util.date 我想从中减去三个月 在API中找不到很多乐趣 Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.MONTH, -3); 使用setTime方法设置日期。日期类本身不够(+: 你必须在这里使用Calendar类 类似这样的东西 GregorianCalendar lCalendar = new GregorianCalendar(); lCa

我的日期类型为
java.util.date

我想从中减去三个月

在API中找不到很多乐趣

Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.MONTH, -3);

使用
setTime
方法设置日期。

日期类本身不够(+: 你必须在这里使用Calendar类

类似这样的东西

GregorianCalendar lCalendar = new GregorianCalendar();
lCalendar.setTime( aDate );
lCalendar.add(Calendar.MONTH, -3);

p、 上面的代码段未经测试可编译。

这是普通的JDK版本,它需要
日历类作为帮助程序:

Date referenceDate = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(referenceDate); 
c.add(Calendar.MONTH, -3);
return c.getTime();
<> P>但您应该认真考虑使用,因为<代码>日期<代码>和<代码>日历>代码>类。Joda可以做到以下几点:

new DateTime().minusMonths(3).toDate();
或者,如果要从给定日期而不是当前日期中减去:

new DateTime(referenceDate).minusMonths(3).toDate();
针对Java 8的更新:对于Java 8,您还可以使用新的JSR 310 API(受Joda启发):

我总是推荐这类东西。它有一个更好的API,并且不会遇到标准Java日期/时间的线程问题(例如,
SimpleDataFormat
的问题,或者一般的易变性)

e、 g

将返回过去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帮助可以一行完成;)

您可以使用函数

static Date addMonths(Date date, int amount)
向返回新对象的日期添加月数。原定日期不变要添加的金额可能为负数,因此您可以追溯到3个月前。

您可以使用

Date d1 = new Date()
d1.setMonth(d1.month-3)

希望这有助于使用Java8您可以这样做

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());
字符串startDate=“15/10/1987”


您不会从Java的日期/时间API中找到很多乐趣,因为它是JDK中最差的(性能、线程、不合逻辑等等)之一。我推荐乔达时间作为替代品。此库严重影响了将在Java 7或更高版本中添加到Java的新日期/时间JSR-310。是否有理由执行GregorianCalendar lCalendar=new GregorianCalendar();而不是Calendar lCalendar=Calendar.getInstance()?实例化GregorianCalendar直接显示java.util.Calendar内部工作的某些知识。但是,要通过factory calendar获取日历,getInstance()会根据有关您所在位置的重要信息自动提供最合适的日历。如果那是一个格里高利安达令,那么你将得到一个格里高利安达令。因此,工厂是更通用的方法。“使用setTime方法设置日期”-在这句简单的句子中是java.util.date:-)所有错误的总结@Firstthumb:最重要的问题是日期不是一成不变的。二传手说明了这个问题。但与布赖恩的评论相反,还有其他问题。请参阅Joda站点,了解他们为什么创建Joda库的一些解释。java.util.Date是java的标准。你是对的。它的性能不好。但我坚持认为,我的答案是解决AJM问题+1的方法之一。即使使用java.util.Date,也可以很容易地进行比较。
Date d1 = new Date()
d1.setMonth(d1.month-3)
Date d = Date.from(LocalDate.now().minusMonths(3).atStartOfDay(ZoneId.systemDefault()).toInstant());
// 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());
// 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());
    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();