首先来一个错误的示例:
public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date parse = sdf.parse("2017-01-01"); Calendar calendar = Calendar.getInstance(); calendar.setTime(parse); calendar.roll(Calendar.DAY_OF_YEAR, -1); // calendar.roll(Calendar.DAY_OF_MONTH, -1); // calendar.roll(Calendar.DAY_OF_WEEK, -1); Date prevDay = calendar.getTime(); System.out.println(sdf.format(prevDay)); }
上面的代码,2017-01-01 往前一天,我们希望得到 2016-12-31,但是结果是 2017-12-31。
要获取真实的日期,应该这样:
public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date day = sdf.parse("2017-01-01"); long ms = day.getTime() - 1*24*3600*1000L; Date prevDay = new Date(ms); System.out.println(sdf.format(prevDay)); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步