zoukankan      html  css  js  c++  java
  • 日期时间的API测试

    1.jdk 1.8  之前的日期时间的API类型

    ①System类中currentTimeMillis();
    ②java.util.Date和子类java.sql.Date
    ③SimpleDateFormat
    ④Calendar

    2.SimpleDateFormat的使用

    SimpleDateFormat的使用,SimpleDateFormat对日期Date类的格式化和解析
    1.格式化,日期 --->字符串
    2.解析,格式化的逆过程,字符串 --->日期
    @Test
       public void testSimpleDateFormat() throws ParseException {
         //实例化SimpleDateFormat
          SimpleDateFormat sdf=new SimpleDateFormat();
    
          //格式化  日期  --->字符串
          Date date=new Date();
          System.out.println(date); //Thu Jul 18 21:41:57 CST 2019
          String format = sdf.format(date);
          System.out.println(format); //19-7-18 下午9:41
           
          //解析
           String str="19-10-18 下午4:17";
           Date date1=sdf.parse(str);
           System.out.println(date1); //Fri Oct 18 16:17:00 CST 2019
    
           //*************按照指定的方式格式化和解析:调用带参的构造器********
           //SimpleDateFormat sdf1=new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
           SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
           String format1=sdf1.format(date);
           System.out.println(format1); //2019-07-18 09:41:57
    
           //解析: 要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),否则会抛异常
           Date date2 = sdf1.parse("2019-07-18 04:30:05");
           System.out.println(date2);//Thu Jul 18 04:30:05 CST 2019
    
       }

    3.练习一:字符串"2019-07-18" 转换为java.sql.Date

    @Test
    public void test1() throws ParseException {
         String birth="2019-07-18";
         SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
         Date date=sdf1.parse(birth);
         System.out.println(date); //Thu Jul 18 00:00:00 CST 2019
            java.sql.Date birthDate = new java.sql.Date(date.getTime());
            System.out.println(birthDate); //2019-07-18
     }  

    4.练习二:渔夫“三天打渔两天晒网” 从1990-01-01开始,在之后的某年某月他是打渔还是晒网?例如2020-09-08

    思路:转化为毫秒数,(一天=24小时=24 *60分钟=24 *60 *60秒=24 *60 *60 *1000毫秒

    具体代码实现:
    @Test
     public void test2() throws ParseException {
         SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd");
         Date date1 =sdf1.parse("1990-01-01");
         //System.out.println(date1.getTime());  //631123200000
         SimpleDateFormat sdf2 =new SimpleDateFormat("yyyy-MM-dd");
         Date date2 =sdf1.parse("2020-09-08");
         //System.out.println(date2.getTime());  //1599494400000
         //计算总天数
         long date= (date2.getTime() - date1.getTime())/(1000 * 60 * 60 *24);
         //System.out.println(date);  //11208
    
         long l=date%5;
         //System.out.println(l);  //3
         if(l==1 || l==2 ||l==3){
             System.out.println("渔夫打渔");
         }else {
             System.out.println("渔夫晒网");
         }
     }

    5.Calendar日历类的使用

    注意,获取月份时,一月是0,二月是1,以此类推,12月是11,获取星期时,周日是1,周一是2,以此类推,周六是7

     @Test
        public void testCalendar(){
          //1.实例化,它是抽象类,不能直接实例化
            // 方式一,创建其子类(GregorianCalendar)的对象
            //方式二,调用其静态方法getInstance()
            Calendar calendar=Calendar.getInstance();
            System.out.println(calendar.getClass());//class java.util.GregorianCalendar相当于还是创建的子类的对象
            //2.常用方法
            //get()
            int day=calendar.get(Calendar.DAY_OF_MONTH);//获取今天是这个月的第几天
            System.out.println(day); //18
            System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); //5
            //set()
            calendar.set(Calendar.DAY_OF_MONTH,23);
            day=calendar.get(Calendar.DAY_OF_MONTH);
            System.out.println(day); //23
            //add()
            calendar.add(Calendar.DAY_OF_MONTH,3);//修改的是calendar本身
            day=calendar.get(Calendar.DAY_OF_MONTH);
            System.out.println(day); //26
            calendar.add(Calendar.DAY_OF_MONTH,-3);
            day=calendar.get(Calendar.DAY_OF_MONTH);
            System.out.println(day); //23
            //getTime()  日历类 ---> Date
            Date date=calendar.getTime();
            System.out.println(date); //Tue Jul 23 21:50:21 CST 2019
            //setTime() Date --->日历类
            Date date1=new Date();
            calendar.setTime(date1);
            day=calendar.get(Calendar.DAY_OF_MONTH);
            System.out.println(day); //18
       }
    

    6.jdk 1.8 新增的日期时间API

    要增加新的日期时间API的原因:

    ①可变性,日期,时间这样的类应该是不可变的
    ②存在偏移性,Date中的年份是从1900开始的,月份是从0开始的
    ③格式化,格式化只对Date有用,Calendar则不行
    ④不是线程安全的,不能处理闰秒等
    偏移量会导致错误的比较具体见下面代码实现:
     @Test
        public void testDate(){
           
            Date date1=new Date(2020,9,8);
            System.out.println(date1);  //Fri Oct 08 00:00:00 CST 3920
            Date date2=new Date(2020-1900,9,8);
            System.out.println(date2); //Thu Oct 08 00:00:00 CST 2020
    
        }
    

     jdk 1.8 新增的API ——LocalDate、LocalTime、LocalDateTime类等

    LocalDate、LocalTime、LocalDateTime类的使用如下:
    @Test
        public void test1(){
            //now():获取当前的日期、时间、日期+时间
            LocalDate localDate= LocalDate.now();
            System.out.println(localDate); //2019-07-18
            LocalTime localTime=LocalTime.now();
            System.out.println(localTime); //20:34:18.986
            LocalDateTime localDateTime=LocalDateTime.now();
            System.out.println(localDateTime); //2019-07-18T20:34:18.986
    
            //of():设置指定的年、月、日、时、分、秒,没有偏移量
            LocalDateTime localDateTime1=LocalDateTime.of(2020,10,19,20,33,40);
            System.out.println(localDateTime1); //2020-10-19T20:33:40
    
            //getxxx() 获取相关的属性
            System.out.println(localDateTime.getDayOfMonth()); //18  当前是本月的第几天
            System.out.println(localDateTime.getDayOfWeek()); //THURSDAY  当前是本周的周几
            System.out.println(localDateTime.getMonth());  //JULY   当前是几月
            System.out.println(localDateTime.getMonthValue()); //7  当前月份的数字形式
            System.out.println(localDateTime.getHour()); //20  当前的小时数
            System.out.println(localDateTime.getMinute()); //39   当前分钟数
            System.out.println(localDateTime.getSecond());  //35  当前秒数
    
            //体现了不可变性,返回值修改,本身并不修改
            //withxxx():设置相关的属性
            LocalDate localDate1 = localDate.withDayOfMonth(26);
            System.out.println(localDate); //2019-07-18
            System.out.println(localDate1); // 2019-07-26
    
            LocalDateTime localDateTime2= localDateTime.withHour(4);
            System.out.println(localDateTime);  //2019-07-18T20:49:31.531
            System.out.println(localDateTime2); //2019-07-18T04:49:31.531
    
           //设置加
            LocalDateTime localDateTime3 = localDateTime.plusMonths(3);
            System.out.println(localDateTime);  //2019-07-18T20:53:55.526
            System.out.println(localDateTime3); //2019-10-18T20:53:55.526
    
            //设置减
            LocalDateTime localDateTime4 = localDateTime.minusDays(5);
            System.out.println(localDateTime);   //2019-07-18T20:56:12.180
            System.out.println(localDateTime4);  //2019-07-13T20:56:12.180
        }
    日期时间在使用时要格外注意。
  • 相关阅读:
    lintcode-453-将二叉树拆成链表
    qcow2虚拟磁盘映像转化为vmdk
    wiki
    oracle
    mysql配置记录
    consul命令记录
    Prometheus监控elasticsearch集群(以elasticsearch-6.4.2版本为例)
    centos7修改网卡名称为eth0
    linux下将普通用户加入到docker组,使它可以运行docker命令
    CentOS配置history记录每个用户执行过的命令
  • 原文地址:https://www.cnblogs.com/gujun1998/p/11210297.html
Copyright © 2011-2022 走看看