zoukankan      html  css  js  c++  java
  • Java:取得当前日期一周之前/之后的日期,或者是一月之前/之后的日期

    一. 旧的方式

    参考以前的博客:Java中日期容易计算错误的问题

    1. 需求

    取得当前时间前一周的时间。比如说:今天是2009-4-23,运行结果则为:2009-4-16。

    代码:一般人肯定会这样写:

    String lastModified = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date((new java.util.Date().getTime() - 7*24*60*60*1000)));

    表面上看结果是正确的。

    2. 问题

    如果想取得当前时间前一个月的时间,直接修改上面的7为30,形如:30 * 24 * 60 * 60 * 1000,结果肯定不是你想要的2009-3-24。而是2009-5-13,你没看错!

    3. 原因

    java日期的数值表达值为long类型的,应该用long型参数去做操作。7 * 24 * 60 * 60 * 1000默认为整型操作,它没有溢出;但30 * 24 * 60 * 60 * 1000对于整型来说是溢出的,变成负数,所以日期反而加大。

    4. 解决

    String lastModified = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date((new java.util.Date().getTime() - (long)30*24*60*60*1000)));

    这样写就可以解决问题了。

    二. 新的方式

        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.util.Calendar cal = java.util.Calendar.getInstance();
        cal.setTime(sdf.parse("2009-4-23"));
        cal.add(java.util.Calendar.DATE, -7); // 向前一周;如果需要向后一周,用正数即可
    //    cal.add(java.util.Calendar.MONTH, -1); // 向前一月;如果需要向后一月,用正数即可
        System.out.println(sdf.format(cal.getTime()));

    这样就可以取得一个月以前或者是一周以前的日期了。

  • 相关阅读:
    Scala学习(八)---Scala继承
    Scala学习(九)---文件和正则表达式
    Scala学习(六)---Scala对象
    jemter----命令行模式(cmd)导出测试报告
    js数据类型
    定期任务,如每月清理(SpringBoot Mybatis-Plus)
    定时执行任务(SpringBoot Mybatis-Plus)
    图片服务映射(SpringBoot mybatis-plus)
    图片压缩上传(Springboot mybatis-plus)
    java生成pdf
  • 原文地址:https://www.cnblogs.com/nayitian/p/2943737.html
Copyright © 2011-2022 走看看