• Java日期类汇总


    日期

    //Java提供的日期类
    import java.util.Date;
    //值得注意的一个是Java另外还提供了一个接收SQLDate的类型:
    import java.sql.Date// --> 后续再说
    
    • 1
    • 2
    • 3
    • 4

    1970年1月1日0点

    浅谈一下计算机时间为什么始于1970年1月1日0时?

    System.out.println(Integer.MAX_VALUE);
    
    • 1

    ​ Integer的范围内最大值–>2147483647 也就是2的31次方-1
    Integer在Java中是int的包装类型,4字节也就是32位,所以2147483647也是Integer能表示的最大范围, 一年的总秒数是31,536,000那么计算机最多也就表示到2147483647秒,大概是68.1年
    ​ 而1970年经过68.1年达到–>2038年01月19日03时14分07秒达到该极限时便会出现时间回归现象,很多软件就会运行异常,但是由于计算机的发展逐渐产生了64位、甚至是128位的计算机
    ​ 我们以64位为例,64位仍旧以1970年为基准经过换算它能够表示的最大时间是292,277,026,596年12月4日15时30分08秒
    大概两亿年后:计算机还存不存在我不知道,反正我是不存在了

    包括Java在内的绝大多数编程语言均起源于UNIX系统,而作为最早出现的操作系统考虑到计算机产生的年代和应用的年限(1968年产生),所以综合采用了1970年为基准点 作为UNIX系统的纪元时间,Java自然也遵循了这一约束

    第一代操作Date

    /* 获取当前系统时间 */
            System.out.println(new Date());
            /* 返回距离1970.01.01.0时的毫秒值 */
            System.out.println(new Date().getTime());
            /* 将毫秒值换算成日期对象 获取的仍然是当前系统时间 */
            System.out.println(new Date(new Date().getTime()));
            /* 上述方式获取的时间打印格式为: Wed Nov 02 15:50:34 CST 2022 */
            /* 此时就需要利用simpleDateFormat来规定和解析日期格式 */
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            String format = sdf.format(new Date());
            System.out.println(format);
            /* 同样我们可以只规定年月日 */
            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
            System.out.println(sdf2.format(new Date()));
            /* 获取时分秒 */
            SimpleDateFormat sdf3 = new SimpleDateFormat("hh:mm:ss");
            System.out.println(sdf3.format(new Date()));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    第二代操作Calendar日历

     /* Calendar日历类 */
            // Calendar通常不能定义打印的格式  需要开发人员自行组合显示
            // public abstract class Calendar implements Serializable, Cloneable, Comparable
            // 由于Calendar是抽象类,并且构造器均为protected修饰,所以不能通过new来直接创建示例  要通过API Calendar.getInstance
            Calendar cal = Calendar.getInstance();
            System.out.println("cal:"+ cal);
            System.out.println("通过Calendar获取时区:"+ cal.getTimeZone());
            /* 下面用Calendar获取具体字段 */
            //获取年  --> 2022年
            System.out.println("YEAR= \t"+cal.get(Calendar.YEAR));
            //获取月  --> 11月  获取月时返回的是从0开始编号  也就是 1月显示为0月  所以需要+1
            System.out.println("MONTH= \t"+(cal.get(Calendar.MONTH)+1));
            //获取日  --> 2日
            System.out.println("DAY_OF_MONTH= \t"+cal.get(Calendar.DAY_OF_MONTH));
            //获取时  --> 16时  两种形式 HOUR(12小时制) 和 HOUR_OF_DAY(24小时制)
            System.out.println("HOUR= \t"+cal.get(Calendar.HOUR_OF_DAY));
            //获取分  -->
            System.out.println("MINUTE= \t"+cal.get(Calendar.MINUTE));
            //获取秒
            System.out.println("SECOND= \t"+cal.get(Calendar.SECOND));
            // 开发人员自行组合打印日期时间
            System.out.println((cal.get(Calendar.YEAR)+"年"+(cal.get(Calendar.MONTH)+1))+"月"+cal.get(Calendar.DAY_OF_MONTH)+"日 "+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE)+":"+cal.get(Calendar.SECOND));
            // 其他的杂七杂八
            //获取具体天DAY_OF_YEAR -->(顾名思义一年当中的第几天)
            System.out.println("DAY_OF_YEAR= \t"+cal.get(Calendar.DAY_OF_YEAR));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    第三代LocalDate、LocalTime、LocalDateTime

    • LocalDate用于获取日期
    • LocalTIme表示获取时间
    • LocalDateTime获取日期+时间
    • 上述三种日期类构造器均为私有,不能直接通过new关键字获取实例,具体用法如下:
    /* Java.time第三代日期类使用 */
            LocalDate date = LocalDate.now();
            System.out.println("获取日期:"+ date);
            LocalTime time = LocalTime.now();
            System.out.println("获取时间:"+ time);
            LocalDateTime dateTime = LocalDateTime.now();
            System.out.println("获取日期+时间:"+ dateTime);
            /* 其他用法 */
            // -- 获取年
            int year = date.getYear();
            System.out.println("年:"+year);
            // -- 获取月  两种方式  方式一: 此处得到的是一个日期枚举值(英文月份名称)
            Month month = date.getMonth();
            System.out.println("(方式一)月:"+month);
            // 获取月份 方式二: 返回为数值
            int month2 = date.getMonthValue();
            System.out.println("(方式二)月:"+month2);
            // -- 获取日
            int days = date.getDayOfMonth();
            System.out.println("日:"+days);
            // -- 获取时
            int hours = time.getHour();
            System.out.println("时:"+hours);
            // -- 获取分
            int minute = time.getMinute();
            System.out.println("分:"+minute);
            // -- 获取秒
            int second = time.getSecond();
            System.out.println("秒:"+second);
            // 上述分别获取时分秒 是扽别利用了LocalDate和LocalTime  直接用LocalDateTime来获取
            System.out.println(dateTime.getYear()+"年"+dateTime.getMonthValue()+"月"+dateTime.getDayOfMonth()+"日   "+dateTime.getHour()+":"+dateTime.getMinute()+":"+dateTime.getSecond());
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    那么同样的也会有为第三代日期类做出格式规定和解析的方法类–DateTimeFormat

    类似于SimpleDateFormat,用法如下:

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            LocalDateTime ldt = LocalDateTime.now();
            String format = dtf.format(ldt);
            System.out.println(format);
    
    • 1
    • 2
    • 3
    • 4

    可以看出第三代的LocalDateTime与DateTimeFormat的用法与初代日期类的Date和SimpleDateFormat是相同的

    持续日期/时间:Period和Duration

    Period:用于计算两个日期的间隔

    LocalDate ld1 = LocalDate.now();
            LocalDate ld2 = LocalDate.of(2021,10,7);
            Period pi = Period.between(ld2,ld1);
            System.out.println(pi);
            // pi打印结果为--> P1Y1M1D  代表:Period 1 year 1 Month 1 Day
            int years = pi.getYears();
            System.out.println(years);
            int months = pi.getMonths();
            System.out.println(months);
            int days = pi.getDays();
            System.out.println(days);
            long all = pi.toTotalMonths();
            System.out.println("总月份:"+all);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Duration:用于计算两个时间点的间隔

    /* Duration计算时间间隔用法 */
            LocalDateTime ldt1 = LocalDateTime.now();
            LocalDateTime ldt2 = LocalDateTime.of(2022,11,2,12,0);
            Duration between = Duration.between(ldt2,ldt1);
            System.out.println(between);
            //between打印结果 --> PT6H54M39.48S  代表 6 Hours 54 Minutes 39.48 Scond
            //相差总天数
            System.out.println("相差总天数"+between.toDays());
            //相差总小时数
            System.out.println("相差总小时数"+between.toHours());
            //相差总分钟数
            System.out.println("相差总分钟数"+between.toMinutes());
            //相差总秒数
            System.out.println("相差总秒数"+between.getSeconds());
            //相差总毫秒数
            System.out.println("相差总毫秒数"+between.toMillis());
            //相差总纳秒数
            System.out.println("相差总纳秒数"+between.toNanos());
            //相差不足一纳秒的纳秒数
            System.out.println("相差不足一纳秒的纳秒数"+between.getNano());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    22-08-22 西安 Mysql高级&javaSE面试题(01)“== 和 equals的区别” 、存储引擎
    leetcode - 学习计划之剑指offer
    各类深度学习框架详解+深度学习训练环境搭建-GPU版本
    Python自动化测试(1)-自动化测试及基本技术手段概述
    RabbitMQ死信队列与延迟队列
    尚医通 (十四) --------- vue-element-admin 与 前端框架
    SuperVariMag 超导磁体系统 — SVM 系列
    Django反向解析函数reverse与resolve
    SQL面试题今天你登录了吗?(扩展表连接)
    【行业动态】福建服装品牌如何完成差异化战略?
  • 原文地址:https://blog.csdn.net/yuqu1028/article/details/127656920