• java时间相关的API总结


    java时间相关的API总结

    一、JDK8之前的API

    1.System类的currentTimeMillis()
    ①获取当前时间对应的毫秒数,long类型,时间戳
    ②当前时间与1970年1月1日0分0秒之间的毫秒数
    ③常用来计算时间差

    二、两个Date类

    1.java.util.Date

     //创建一个基于当前系统时间的Date实例
            Date date1=new Date();
            //Mon Oct 23 21:31:54 CST 2023
            System.out.print(date1.toString());
    
            long milliTimes=date1.getTime();
            //1698068033128
            System.out.print("\n对应的毫秒数"+milliTimes);
    
            //创建一个基于指定时间戳的Date的实例
            Date date2=new Date(1698068033128L);
            System.out.print("\n"+date2.toString());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.java.sql.Date(对应数据库中Date)

    java.sql.Date date1=new java.sql.Date(1698068033128L);
            //2023-10-23
            System.out.print(date1.toString());
            //1698068033128
            System.out.print(date1.getTime());
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、SimpleDateFormat

    SimpleDateFormat类:用于时间日期的格式化和解析
    格式化:日期—>字符串
    解析:字符串—>日期

    public void test3() throws ParseException {
            SimpleDateFormat sdf=new SimpleDateFormat();
            //格式化:日期to字符串
            Date date1=new Date();
            String strData = sdf.format(date1);
            //23-10-23 下午9:48
            System.out.print(strData);
    
            //解析:字符串to日期
            Date date2 = sdf.parse("23-10-23 下午9:48");
            //Mon Oct 23 21:48:00 CST 2023
            System.out.print(date2);
    
            SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date3=new Date();
            String strData2=sdf2.format(date3);
            //2023-10-23 21:54:13
            System.out.print(strData2);
            Date date4=sdf2.parse("2023-10-23 21:54:13");
            //Mon Oct 23 21:54:13 CST 2023
            System.out.print(date4);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4.java.util.Calendar(日历)
    Date类的大部分Api被废弃了,替换为Calendar

    public void test5(){
            /**
             * 实例化,由于Calendar是抽象类,所以我们需要创建其子类的实例
             * 这里我们通过Calendar的静态方法
             */
            Calendar calendar=Calendar.getInstance();
            //get(int field)
            //23,这一月的第多少天
            System.out.println(calendar.get(Calendar.DAY_OF_MONTH)+"\n");
            //296,这一年的第多少天
            System.out.println(calendar.get(Calendar.DAY_OF_YEAR)+"\n");
            //set(int field,xx)
            calendar.set(Calendar.DAY_OF_MONTH,25);
            //25
            System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
    
            //add(int field,xx)
            calendar.add(Calendar.DAY_OF_MONTH,3);
            //28
            System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
            //Calendar to Date
            Date date=calendar.getTime();
            //Sat Oct 28 22:11:21 CST 2023
            System.out.println(date);
        }
    
    • 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

    四、JDK8:新的时间API

    之前时间API存在的问题
    可变性: 像日期和时间这样的类应该是不可变的
    偏移性: Date中的年份是从1900开始的,而月份都是从0开始的
    格式化: 格式化只对Date有用,Calendar则不行
    此外,他们也不是线程安全的,不能处理闰秒等
    为了解决问题引入新的API。

    1.本地日期时间:LocalDate,LocalTime,LocalDateTime

    public void test6(){
            LocalDate localDate=LocalDate.now();
            LocalTime localTime= LocalTime.now();
            LocalDateTime localDateTime=LocalDateTime.now();
            //2023-10-24
            System.out.println(localDate);
            //21:58:26.449
            System.out.println(localTime);
            //2023-10-24T21:58:26.449
            System.out.println(localDateTime);
    
            //of()
            LocalDate localDate1=LocalDate.of(2000,11,2);
            LocalDateTime localDateTime1= LocalDateTime.of(2000,9,11,20,24,30);
            //2000-11-02
            System.out.println(localDate1);
            //2000-09-11T20:24:30
            System.out.println(localDateTime1);
    
            //getXXX()
            LocalDateTime localDateTime2=LocalDateTime.now();
            //24
            System.out.println(localDateTime2.getDayOfMonth());
    
            //withXXX() 体现不可变性
            LocalDateTime localDateTime3 = localDateTime2.withDayOfMonth(15);
            //2023-10-15T22:06:25.410
            System.out.println(localDateTime3);
    
            LocalDateTime localDateTime4 = localDateTime2.plusDays(2);
            //2023-10-26T22:07:38.908
            System.out.println(localDateTime4);
        }
    
    • 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
    • 33

    2.瞬时:Instant

    时间线上的一个瞬时点,可能被用来记录应用程序的事件的事件戳,与Date有点类似

    public void test7(){
            Instant instant=Instant.now();
            //2023-10-24T14:14:43.069Z
            System.out.println(instant);
    
            Instant instant1 = Instant.ofEpochMilli(121313213123L);
            //1973-11-05T02:06:53.123Z
            System.out.println(instant1);
            long milli = instant.toEpochMilli();
            //1698157087034
            System.out.println(milli);
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3.日期时间格式化:DateTimeFormatrer

    public void test8(){
            //自定义格式
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            LocalDateTime localDateTime=LocalDateTime.now();
            String format = dateTimeFormatter.format(localDateTime);
            //2023-10-24 10:23:02
            System.out.println(format);
    
            //解析 字符串->日期时间
            TemporalAccessor parse = dateTimeFormatter.parse("2023-10-24 10:23:02");
            LocalDateTime from = LocalDateTime.from(parse);
            //2023-10-24T10:23:02
            System.out.println(from);
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    springcloud五大核心部件
    JavaScript 数组如何实现冒泡排序?
    Unity 预制体放在场景中可见,通过代码复制出来不可见的处理
    Android Jetpack组件架构 :LiveData的使用和原理
    【C++上层应用】4. 多线程
    企业公司项目开发好一部分基础功能,重要的事保存到线上第一a
    node笔记记录26aynsc和await
    基于4G智能网关的野外光伏逆变器数据采集方案
    413报错(nginx :请求体大小超出最大限制)
    vue3实现懒加载
  • 原文地址:https://blog.csdn.net/DyP__CSDN/article/details/133999602