• Java基础


    前言:

      在日常Java开发中,常常会使用到Date的相关操作,如:获取当前系统时间、获取当前时间戳、时间戳按指定格式转换成时间等。以前用到的时候,大部分是去网上找,但事后又很快忘记。现为方便自己今后查阅,也方便各位猿友学习探讨,在此将我们常用的时间实例、函数归纳罗列出来,供大家参考,如有不对,欢迎在评论区共同探讨。

    1、获取系统当前时间

      获取系统当前时间,我们经常会用到,如:判断优惠券是否已经过期、更新某条数据的时间等。(当然,这些也可以在sql中进行)

     方法一:

      Date类对象是用来表示时间和日期的,这个类提供了一系列操作时间和日期的函数,获取系统当前时间就是我们最常用的。如下:

     1 public static void main(String[] args) {
     2     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
     3     SimpleDateFormat dateForm24 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     4     Date date1 = new Date();
     5     System.out.println("系统当前时间是(未格式化):" + date1);
     6     System.out.println("系统当前时间是(已格式化):" + dateFormat.format(date1));
     7     System.out.println("系统当前时间是(格式-24):" + dateForm24.format(date1));
     8 }
     9 控制台输出:
    10 系统当前时间是(未格式化):Fri Dec 27 16:43:47 CST 2019
    11 系统当前时间是(已格式化):2019-12-27 04:43:47
    12 系统当前时间是(格式-24):2019-12-27 16:43:47

      从控制台输出,我们可以看到,同一个时间有三种表达样式。这里解释一下,第一种是格林威治时间格式,这通常不是我们想要的结果,所以引入了后两种。

      后两种我们使用了时间日期格式化类(SimpleDateFormat)来把时间格式化成我们想要的样式。这里需要注意的是,后两种在“小时”的样式上略有不同,小写的“hh”表示12小时制,大写的“HH”则为24小时制,我们使用时可根据需求而定。

     方法二:

      除了Date类,我们还经常使用Calendar类来操作时间和日期,我们可以把它看做是Date类的增强版,因为Calendar类提供了一组方法,允许将一个以毫秒为单位的时间转换成年、月、日、时、分、秒、星期等。我们可以把Calendar类看做是万年历,默认显示的是当时间,同时也可以查看其他时间。如下:(其实,Calendar底层也是通过new Date() 获取Date实例)

     1 public static void main(String[] args) {
     2     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     3     Calendar calendar = Calendar.getInstance();
     4     Date date2 = calendar.getTime();
     5     System.out.println("系统当前时间是:" + dateFormat.format(date2));
     6     //还可以使用[年月日 时分秒]拼接的方式获取;
     7     int year        = calendar.get(Calendar.YEAR);          //
     8     int month       = calendar.get(Calendar.MONTH)+1;       //月(从0开始,故要+1):11
     9     //星期几:先判断一周的第一天是不是星期天;如果是,则-1;
    10     int dayOfWeek   = calendar.getFirstDayOfWeek()==Calendar.SUNDAY?calendar.get(Calendar.DAY_OF_WEEK)-1:calendar.get(Calendar.DAY_OF_WEEK);
    11     int dayOfYear   = calendar.get(Calendar.DAY_OF_YEAR);   //日(年的第N日)
    12     int dayOfMonth  = calendar.get(Calendar.DAY_OF_MONTH);  //日(月的第N日)
    13     int day         = calendar.get(Calendar.DATE);          //日(同上)
    14     int hourOfDay   = calendar.get(Calendar.HOUR_OF_DAY);   //时(24小时制)
    15     int hour        = calendar.get(Calendar.HOUR);          //时(12小时制)
    16     int minute      = calendar.get(Calendar.MINUTE);        //
    17     int second      = calendar.get(Calendar.SECOND);        //
    18     int millisecond = calendar.get(Calendar.MILLISECOND);
    19     System.out.println("现在是:"+year+"年"+month+"月"+day+"日"
    20             +hourOfDay+"点("+hour+"点)"+minute+"分"+second+"秒"+millisecond
    21             +"毫秒,星期"+dayOfWeek+",这是"+year+"年的第"+dayOfYear+"天.");
    22 }
    23 
    24 控制台输出:
    25     系统当前时间是:2019-12-27 17:16:17
    26     现在是:2019年12月27日17点(5点)16分17秒94毫秒,星期5,这是2019年的第361天.

      这里有两个地方需要注意:

      1、获取月份:int month = calendar.get(Calendar.MONTH)+1; 直接获取到的月份默认是从0开始的,即当前12月获取到的是11,所以这里要 +1;

      2、获取星期:上面我用了个三元,拆开来就是要比较【一周的第一天是不是周日】。

     1 //int dayOfWeek   = calendar.getFirstDayOfWeek()==Calendar.SUNDAY?calendar.get(Calendar.DAY_OF_WEEK)-1:calendar.get(Calendar.DAY_OF_WEEK);
     2 //当前星期几
     3 int dayOfWeek   = calendar.get(Calendar.DAY_OF_WEEK);
     4 //一周的第一天
     5 int firstDayOfWeek = calendar.getFirstDayOfWeek();
     6 //星期日
     7 int sunday = Calendar.SUNDAY; 
     8 //如果一周的第一天是星期日,则需要-1;
     9 if (firstDayOfWeek==sunday){
    10     dayOfWeek --;
    11 }
    12 System.err.println("今天是星期" + dayOfWeek);

     方法三:

      除了直接获取时间,我们还可以通过获取当前时间的毫秒值,然后再转换成时间。

     1 public static void main(String[] args) {
     2     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     3     long nowLong=System.currentTimeMillis();   //获取出来的是当前时间的毫秒值
     4     //把毫秒值转换成时间格式
     5     Date date = new Date();
     6     date.setTime(nowLong);
     7     System.out.println("系统当前时间是:" + dateFormat.format(date));
     8 }
     9 //控制台输出:
    10 //    系统当前时间是:2019-12-27 18:00:00 --->这是什么意思???????

      Tip:以上就是获取系统当前时间的三种方式,各位大佬有其他更好的方式,欢迎评论区补充。

    2、获取当前时间的前一天/后一天

      Tip:通过观察可以发现,前一天和后一天只是修改了 -1 和 +1 这两个值。

    private static void getYesterday() {
        //获取前一天的时间
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        date = calendar.getTime();
        System.out.println("当前时间是:" + (format.format(new Date())) + ",昨天是:" + (format.format(date)));
        //>>>> 当前时间是:2020-06-23 14:53:15,昨天是:2020-06-22 14:53:15
    }
    
    private static void geTomorrow() {
        //获取前一天的时间
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, +1);
        date = calendar.getTime();
        System.out.println("当前时间是:" + (format.format(new Date())) + ",明天是:" + (format.format(date)));
        //>>>> 当前时间是:2020-06-23 14:53:15,明天是:2020-06-24 14:53:15
    }

    3、获取某个时间的整点时间

      要获取某个时间的整点时间,主要在使用格式的时候,把格式设置为 HH:00:00 ;

    private static void getHour() throws ParseException {
        //获取某个时间的整点时间;
        Date date = new Date();
    
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sdf.format(date);
    
        //获取整点时间,主要是使用这个 HH:00:00 的时间格式;
        SimpleDateFormat hourFormatter = new SimpleDateFormat( "yyyy-MM-dd HH:00:00");
        String hourStr = hourFormatter.format(date);
    
        System.out.println("当前时间是:" + dateStr + ",整点时间是:" + hourStr);
        //>>>> 当前时间是:2020-06-23 14:50:22,整点时间是:2020-06-23 14:00:00
    }

    4、获取某个时间的前(后)一个小时

    private static void getOneHourAgo() throws ParseException {
        //获取前(往后)一小时的时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //这里设置你想要的时间
        Date date = new Date();
    
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
    
        //提前的时间用-1,往后的时间用+1;
        calendar.add(Calendar.HOUR_OF_DAY, +1);
        date = calendar.getTime();
        
        System.out.println("当前时间是:" + sdf.format(new Date()) + ",前一小时是:" + sdf.format(date));
        //>>>> 当前时间是:2020-06-23 15:02:55,前一小时是:2020-06-23 16:02:55
    }

    5、比较两个时间前后

    private static void compareTime() throws ParseException {
        //两个时间进行比较,往往是我们比较头疼的,用下面的方法,简单明了,简直是止痛神药!
        String DateStr1 = "2018-03-01 00:01:01";
        String DateStr2 = "2024-12-10 15:50:35";
    
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
        Date dateTime1 = dateFormat.parse(DateStr1);
        Date dateTime2 = dateFormat.parse(DateStr2);
    
        Calendar calendar = Calendar.getInstance();
        Date systemDate = calendar.getTime();
    
        int ago = dateTime1.compareTo(systemDate);
        int future = dateTime2.compareTo(systemDate);
    
        System.out.println("以前的时间:" + ago + ",未来的时间:" + future);
        //>>>> 以前的时间:-1,未来的时间:1 ;
    }

      Tip

        两个Date类型的变量可以通过 date1.compareTo(date2);方法来比较。此方法的描述是这样的:
        如果参数 date1 等于此 date2,则返回值 0;
        如果此 date1 在 date2 参数之前,则返回小于 0 的值;
        如果此 date2 在 date2 参数之后,则返回大于 0 的值。
      实际上比较的是自1970 年 1 月 1 日 00:00:00 GMT以来的毫秒数。毫秒数越大的时间越大。

    6、计算两个时间差

      我们在数据库

    public static void getTimeDifference() throws ParseException {
    
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
        Date date1 = dateFormat.parse("2020-05-01 18:53:40");
        Date date2 = new Date();
    
        //一天的毫秒数
        long d = 1000 * 24 * 60 * 60;
        //一小时的毫秒数
        long h = 1000 * 60 * 60;
        //一分钟的毫秒数
        long m = 1000 * 60;
        // long ns = 1000;
        // 获得两个时间的毫秒时间差异
        long timeDiff = Math.abs(date2.getTime() - date1.getTime());
        // 计算差多少天
        long day = timeDiff / d;
        // 计算差多少小时
        long hour = timeDiff % d / h;
        long hour01 = timeDiff / h;
        // 计算差多少分钟
        long min = timeDiff % d % h / m;
         //输出结果
        System.out.println("当前时间是:" + dateFormat.format(date2));
        System.out.println("比较时间是:" + dateFormat.format(date1));
        System.out.println("间隔:" + day + "天" + hour + "小时" + min + "分钟");
        /*
            当前时间是:2020-06-23 15:59:33
            比较时间是:2020-05-01 18:53:40
            间隔:52天21小时5分钟
        */
    }

      Tip:这里使用了Math.abs()函数取绝对值,如果不用这个函数,那就需要注意一下哪个时间 减 哪个时间;

  • 相关阅读:
    (转)【经验之谈】Git使用之Windows环境下配置
    (转)SQL Server内存遭遇操作系统进程压榨案例
    (转)【javascript基础】原型与原型链
    (转)微信公众平台开发教程目录
    (转)C# .net微信开发,开发认证,关注触发消息,自动应答,事件响应,自定义菜单
    (转)利用快速开发框架,快速搭建微信浏览博客园首页文章
    (转)微信公众平台开发教程(七)Session处理
    多线程入门-创建线程
    MySQL数据库优化
    图解:从单个服务器扩展到百万用户的系统
  • 原文地址:https://www.cnblogs.com/qiuhaitang/p/12107834.html
Copyright © 2020-2023  润新知