常用API---时间类 超详细,,拿码说话

本文详细介绍了JavaJDK7以前的Date类、SimpleDateFormat用于格式化时间和解析字符串的方法,以及Calendar类的使用及其局限性。着重讨论了这些类的优缺点和历史遗留问题。
摘要由CSDN通过智能技术生成

JDK7 以前时间相关类

  • Date 时间

  • SimpleDateFormat 格式化时间

  • Calendar 日历

Date时间类

  • Date类是Java 写好的javabean类,用来描述时间,精确到毫秒

  • 利用空参 —》 默认系统当前时间

  • 有参 —》表示指定时间

案列:抽取时间方法

private static void extracted(){
         long  oneYear = 1000*60*60*24*365L;
 ​
         Date date1 = new Date(0);   //表示原始时间:Thu Jan 01 08:00:00 CST 1970
     
         long time = date1.getTime();   //获取当前Date 对象从原始时间的毫秒值  这里是0
 ​
         time = time+oneYear;
 ​
         date1.setTime(time);   //设置当前 Date对象的时间
         System.out.println(date1);
     }

  • 缺点:Date类中的很多方法已经被标记为过时,因为它们不够灵活也不易于使用。

SimpleDateFormat 类

  • 由于用Date 时间类显示的时间默认是 Thu Jan 01 08:00:00 CST 1970 英文的

  • 那这个类的作用就出来:

      1. 格式化:把时间变成我们喜欢的格式

      2. 解析:把字符串表示的时间变成 Date对象 这样可用于计算

  • 构造方法

    • public SimpleDateFormat() 构造一个SimpleDateFormat 对象 ,使用默认格式

      public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat 对象 ,使用指定格式

  • 常用方法

    • public final String format(Date date) 格式化(日期对象 –> 字符串)

      public Date parse(String source) 解析(字符串 —> 日期对象)

        //1. 定义一个字符串表示时间
               String str = "2023-11-02 11:11:08";
               //2.利用空参构造创造 SimpleDateFormat对象
               //细节:
               //创建对象的格式化要跟字符串的格式化完全一致
               SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
               Date date = simpleDateFormat.parse(str);
               //打印
               System.out.println(date.getTime());  //获取 Date对象时间的毫秒值 1698894668000

  • 格式化模式

    • yyyy – MM –dd HH:mm:ss EE     

      • SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss EE");
                 String format1 = simpleDateFormat1.format(date);
                 System.out.println(format1);   //1970-01-01 08:00:00 周四
    • yyyy年MM月dd日 HH:mm:ss

         SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
               String format1 = simpleDateFormat1.format(date);
               System.out.println(format1);   //1970年01月01日 08:00:00

默认格式

  SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
         Date date = new Date(0L);
         String format = simpleDateFormat.format(date);
         System.out.println(format);   //1970/1/1 上午8:00   
 ​

Calendar

  • 引出:在某个时间的基础上增加一个月? —> 在原有基础上可以做,但比较麻烦

  • 那可不可以只改变月份呢

  • —> Calender 代表了系统当前时间的日历对象,可以单独修改、获取时间中的年、月、日

  • 细节: Calendar 是一个抽象类,不能直接创建对象

    • 通过 getInstance(); 静态方法获取子类对象

    • //1.获取Calendar 对象 ,但是个抽象方法,通过调用静态方法获取子类对象
               //根据系统的不同时区来获取不同的日历对象,格林威治的
               //把时间中的纪元、年、月、日、时、分、秒、星期 等等的都放到一个数组当中
               Calendar cd = Calendar.getInstance();
               System.out.println(cd);
       //java.util.GregorianCalendar[time=1711627839860,areFieldsSet=true,……………….calendar.ZoneInSET=0]
    • 修改日历表时间

    • set() 方法

    •  //2.修改日历代表的时间
               Date d = new Date(0L);
               //在月份当中:范围是 0~11 如果获取出来的是0,实际上是1 月
               //在星期中:  星期日才是一周中的第一天   他们的7 代表星期六  1代表星期天
       ​
               //修改日历表时间
               cd.setTime(d);
               cd.set(Calendar.YEAR,2024);
               cd.set(Calendar.MONTH,2);  //要修改为三月 这里要减一
               cd.set(Calendar.DAY_OF_MONTH,28);

    • set 和 get 方法都可以通过索引来获得日历的某个字段信息,但不好记忆,所以Java 把Calendar 中把索引变成了常量

    • /* 对应索引

      0: 纪元

      1: 年

      2: 月

      3: 一年中的第几周

      4: 一个月中的第几周

      5:一个月中的第几天  */

    • get() 方法

       int year = cd.get(Calendar.YEAR);
               int mouth = cd.get(Calendar.MONTH)+1;
               int date = cd.get(Calendar.DAY_OF_MONTH);
               int week = cd.get(Calendar.DAY_OF_WEEK)-1;  //一周中的第几天 ,从星期天开始数五天
       ​
       ​
               System.out.println(year+"年 "+mouth+"月 "+date+"号"+" 星期"+week );
       ​
       
      • 这里输出

        • 2024年 3月 28号 星期4

    • add() 方法: 为某个字段增加/减少指定的值

    •   //调用方法在这个基础上增加一个月
          cd.add(Calendar.MONTH,+1);
  • 缺点 :Calendar类也有一些问题,例如它的月份从0开始,而且它的API设计不够直观。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值