如何从当前日期减少一个月并希望java.util.Date
使用此代码在变量 im 中疼痛,但它在第 2 行显示错误
java.util.Date da = new Date();
da.add(Calendar.MONTH, -1); //error
如何将此日期存储在java.util.Date
变量中?
使用日历:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
Date result = cal.getTime();
从 Java 8 开始,建议的方法是使用Date-Time API而不是Calendar
.
如果要Date
返回对象:
Date date = Date.from(ZonedDateTime.now().minusMonths(1).toInstant());
如果您不需要确切的Date
对象,则可以直接使用包提供的类,甚至可以获取其他时区的日期:
ZonedDateTime dateInUTC = ZonedDateTime.now(ZoneId.of("Pacific/Auckland")).minusMonths(1);
Calendar calNow = Calendar.getInstance()
// adding -1 month
calNow.add(Calendar.MONTH, -1);
// fetching updated time
Date dateBeforeAMonth = calNow.getTime();
您可以使用Calendar
java.util.Date da = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(da);
cal.add(Calendar.MONTH, -1);
da = cal.getTime();
在 Java8 和 Java9 中使用新的 java.time 包
import java.time.LocalDate;
LocalDate mydate = LocalDate.now(); // Or whatever you want
mydate = mydate.minusMonths(1);
使用此方法的优点是您可以避免所有关于不同月份长度的问题,并且在调整日期和范围方面具有更大的灵活性。本地部分也是时区智能,因此很容易在它们之间进行转换。
顺便说一句,使用 java.time 您还可以获得星期几、一个月中的某一天、直到最后一个月的所有日子、直到一周中的某一天的所有日子等。
mydate.plusMonths(1);
mydate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)).getDayOfMonth();
mydate.with(TemporalAdjusters.lastDayOfMonth());
减少 1 个月的 JDF
Date dateTo = new SimpleDateFormat("yyyy/MM/dd").parse(jdfMeTo.getJulianDate());
Calendar cal = Calendar.getInstance();
cal.setTime(dateTo);
cal.add(Calendar.MONTH, -1);
Date dateOf = cal.getTime();
Log.i("dateOf", dateOf.getTime() + "");
jdfMeOf.setJulianDate(cal.get(Calendar.DAY_OF_YEAR), cal.get(Calendar.DAY_OF_MONTH),
cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
您还可以使用来自 apache common的DateUtils 。该库还支持添加小时、分钟等。
Date date = DateUtils.addMonths(new Date(), -1)