如何在Java中找到3个月前的开始?
我想在本月前3个月开始。如果今天是6月18日,我想要4月1日午夜0分/秒。[四月一日,00:00:00]如何在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
但这种逻辑并没有给我正确的答案。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)