Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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中找到3个月前的开始?_Java_Date - Fatal编程技术网

如何在Java中找到3个月前的开始?

如何在Java中找到3个月前的开始?,java,date,Java,Date,我想在本月前3个月开始。如果今天是6月18日,我想要4月1日午夜0分/秒。[四月一日,00:00:00] 但这种逻辑并没有给我正确的答案。Java中有更好的/不同的方法吗?使用Java 8,您可以使用以下流利的习惯用法: 分区 final Calendar tentativeStartDate = Calendar.getInstance(); tentativeStartDate.set(Calendar.MILLISECOND, 0); tentativeStartDate

我想在本月前3个月开始。如果今天是6月18日,我想要4月1日午夜0分/秒。[四月一日,00:00:00]


但这种逻辑并没有给我正确的答案。Java中有更好的/不同的方法吗?

使用Java 8,您可以使用以下流利的习惯用法:

分区

final Calendar tentativeStartDate =  Calendar.getInstance();
    tentativeStartDate.set(Calendar.MILLISECOND, 0);
    tentativeStartDate.set(Calendar.SECOND, 0);
    tentativeStartDate.set(Calendar.MINUTE, 0);
    tentativeStartDate.set(Calendar.HOUR, 0);
    tentativeStartDate.set(Calendar.DATE, 1);
    tentativeStartDate.add(Calendar.MONTH, -3);
本地

ZonedDateTime.now([your zone ID, e.g. ZoneId.systemDefault()])
    // month offset
    .minusMonths(2)
    // start at day 1
    .withDayOfMonth(1)
    // change time-of-day to when the day starts
    .truncatedTo(ChronoUnit.DAYS)
注意


我将月份偏移量设置为
2
,因为您需要四月

你试过了吗?或者你的解决方案有问题吗?事实上我不理解你的问题这个代码返回3月1日,它正确工作3月是3个月前。我不知道你为什么认为这是一个问题,他可能会问,这是一个好的方式,找到一个好答案前3个月的日期。给读者参考:如果您真的只需要日期而不需要一天中的某个时间,请使用
LocalDate
和类似的方法调用,如图所示。@BasilBourque很好的观点-编写本地日期部分有点太快了!现在修好了。
LocalDate.now([your zone ID, e.g. ZoneId.systemDefault()])
    .minusMonths(2)
    .withDayOfMonth(1)