日期时间的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
    }
日期时间在使用时要格外注意。
posted @ 2019-07-18 22:00  难得糊涂1998  阅读(532)  评论(0编辑  收藏  举报