20210508Java日期类

Java日期类

编辑时间:2021/05/08

读完本节:大概花费 8分钟,共871词

1.JDK1.8之前的日期类
1.Date
  1. Date类属于java.util包下的一个类

  2. 常用的实例化方式

    //无参构造器实例化得到的是当前时间
    Date d = new Date();
    
    //使用带有参数(long date)的构造器,实例化的Date对象指定的毫秒数的时间
    Date d = new Date(long date);
    
  3. 获取当前时间的毫秒数

    Date d = new Date();
    d.getTime();
    

    通过对象.getTime()获取当前时间到基准时间的毫秒数。基准时间:1970年1月1日

2.Calendar
  1. Calendar类属于java.util包下的一个类

  2. Calendar实例化的方式

    Calendar c = Calendar.getInstance();
    
  3. Calendar实例化的方式与Date类实例化的方式不同,不想Date类Calendar类私有化了自己的构造器,通过getInstance()方法来获取实例。

  4. Calendar类获取日期、时间

    Calendar c = Calendar.getInstance();
    //通过对象.get(Calendar.常量)的方式获取常量的值
    System.out.println(c.get(Calendar.YEAR));//获取当前年份
    System.out.println(c.get(Calendar.MONTH));//获取当前月份,注意一月份是0
    System.out.println(c.get(Calendar.DAY_OF_MONTH));//获取当前是该月的第几天
    System.out.println(c.get(Calendar.HOUR_OF_DATE));//获取当前是该天的第几个小时
    System.out.println(c.get(Calendar.MINUTE));//获取当前的分钟数
    System.out.println(c.get(Calendar.SECOND));//获取当前的秒数
    
  5. 设置Calendar对象的时间

    Calendar c = Calendar.getInstance();
    c.set(1988,1,1);//此时设置的时间中的月份也是从0开始的
    c.add(Calendar.YEAR,3);//三年之后
    c.add(Calender.MONTH,-1);//一个月之前
    Calendar c1 = Calendar.getInstance();
    System.out.println(c.after(c1));//false 判断c是否在c1日期之后
    System.out.println(c.before(c1));//false 判断c是否在c1日期之前
    
3.SimpleDateFormat
  1. SimpleDateFormat格式化时间,可以根据指定的格式生成时间

    SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd);
    

    常见的日期格式:

    Pattern
    dd.MM.yy
    yyyy.MM.dd. G ‘at’ hh:mm:ss z
    EEE, MMM d, “yy”
    h:mm a
    H:mm
    H:mm:ss:SSS
    K:mm a,z
    yyyy.MMMMM.dd GGG hh:mm aaa
  2. 使用实例

    @Test
    public void simpleDateFormatTest() throws ParseException{
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      String d = "2021-05-08";
      Date date = sdf.parse(d);
      System.out.println(date);
    }
    
2.JDK1.8及以后的日期类
1.LocalDate
  1. 实例化

    LocalDate date = LocalDate.now();//当前时间2021 05 08
    
  2. 获取年月日

    System.out.println(date.getYear());//获取年
    System.out.println(date.getMonth());//获取月
    System.out.println(date.getDayOfMonth());//获取当前是当月的第几天
    System.out.println(date.getDayOfYear());//获取当前是当年的第几天
    
  3. 日期比较

    LocalDate date1 = LocalDate.parse("2020-05-08");
    System.out.println(date.compareTo(date1));//0
    System.out.println(date.equals(date1));//true
    
  4. 闰年

    通过LocalDate的闰年判断方法,终于不用自己苦苦判断了。

    System.out.println("是否是闰年" + date.isLeapYear());
    
  5. 计算

    date = date.plusMonth(3);
    System.out.println("三个月后的日期" + date);
    date = date.minusMonth(5);
    System.out.println("五个月前的日期" + date);
    
2.LocalTime
  1. 实例化

    LocalTime time = LocalTime.now();
    
  2. 时间运算

    LocalTime localTime = LocalTime.now();
    System.out.println("当前时间" + localTime);
    localTime = localTime.plusHour(3);
    System.out.println("三个小时后的时间" + localTime);
    
3.DateTimeFormatter
  1. DateTimeFormatter与SimpleDateFormat相似,只不过一个前者线程安全,后者线程不安全

  2. 使用实例

    @Test
    public void dateTimeFormatterTest throws ParseException(){
    	DateTimeFormatter formatter = DateTimeFormatter.ofParttern("yyyy-MM-dd");
      LocalDate date = LocalDate.parse("2021-05-08",formatter);
      System.out.println(formatter.format(date));
    }
    
3.日期类之间的转换
  1. 字符串日期格式转换为日期类:可以使用SimpleDateFormat或者DateTimeFormatter,使用SimpleDateFormat如上述所示

    /**
    * 日期转换成字符串
    */
    @Test
    public void stringToSimpleDateFormat() throws ParseException{
      Date date = new Date();
      SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd);
      String s = sdf.format(date);
      System.out.println(s);
    }
    
  2. Date与LocalDate相互转换

    //Date转换为LocalDate
    Date d = new Date();
    System.out.println("date: " + d);
    LocalDate dt = d.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    System.out.println("LocalDate: " + dt);
    //LocalDate转换为Date
    ZonedDateTime zdt = LocalDate.now().atStartOfDay(ZoneId.systemDefault());
    Date d = Date.from(zdt.toInstant());
    System.out.println(d);
    

    085152DE-9607-4857-8D63-9700B7470B94_1_105_c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值