zoukankan      html  css  js  c++  java
  • java日期和时间

    Java常用类:日期和时间

    时间戳

    Long timestamp = System.currentTimeMillis();
    

    日期

    • java.util.Data类

      import java.text.SimpleDateFormat;
      import java.util.Date;
      
      //创建时间对象
      Date date = new Date();
      System.out.println(date);//日期对象:Sun Feb 21 11:14:19 CST 2021
      
      //获取时间戳
      System.out.println(date.getTime());//Long类型
      
      //格式化输出时间
      System.out.println(date.toString());//字符串:Sun Feb 21 11:14:19 CST 2021
      
      
    • java.sql.Date类

      对应数据库的日期类型的变量

       @Test
        public static void test() {
            /*
            java.util.Date的三个子类:
            java.sql.Date YYYY
            java.sql.Time HHMMSS
            java.sql.TimeStamp YYYYHHMMSS 对Date的扩充
            都和数据库操作有关
             */
      
            //方法一:创建sql.Date对象
            Date date = new Date(System.currentTimeMillis());//sql.Date没有无参构造
            System.out.println(date);//2021-03-11
      
            //方法二:创建sql.Date对象
            Date date1 = Date.valueOf("2021-03-11");//util.Date没有该方法
            System.out.println(date1);//2021-03-11
      
            //sql.Date---->util.Date
            //java.util.Date date2 = date;//父类引用指向子类的对象
            //System.out.println(date2.toString());//2021-03-11,依然没有时分秒,子类重写了父类的方法
            java.util.Date date2 = new java.util.Date(date1.getTime());//利用util.Date的有参构造,先将sql.Date转成时间戳
            System.out.println(date2);//Thu Mar 11 00:00:00 CST 2021
      
            //util.Date---->sql.Date
            java.util.Date date3 = new java.util.Date();//Thu Mar 11 22:10:56 CST 2021
            Date date4 = new Date(date3.getTime());
            System.out.println(date4);//2021-03-11
      
        }
      
    • SimpleDateFormat类

      //用 SimpleDateFormat类,日期转字符串
      SimpleDateFormat s = new SimpleDateFormat("yy-MM-dd HH:mm:ss sss");
      System.out.println(s.format(date));//21-02-21 11:20:44 044
      //字符串转日期
      String str = "21-02-21 11:20:44";
      SimpleDateFormat s = new SimpleDateFormat("yy-MM-dd HH:mm:ss");//格式必须与字符串相对应
              try {
                  Date d = s.parse(str);//需要处理该方法抛出的异常,否则会报错
                  System.out.println(d);//日期对象:Sun Feb 21 11:14:19 CST 2021
              }catch (java.text.ParseException e){
                  e.printStackTrace();
              }
      
    • Calendar类

      import java.util.Calendar;
      //Calendar是抽象类,无法通过实例化得到对象
      //方式一:创建子类(GregorianCalendar)的对象
      //方式二:通过getInstance()方法获取
      Calendar cal =  Calendar.getInstance();//Calendar对象的属性是可变的
      
      //获取值,get
      int year = cal.get(Calendar.YEAR);//特别注意:月份MONTH从0开始;DAY_OF_WEEK第一天是星期天(1)
      System.out.println(year);//2021
      
      //设置值,set
      cal.set(Calendar.YEAR,2020);
      
      //计算add
      cal.add(Calendar.YEAR,1)
          
      //两个Calendar对象比较(时间戳大小)
      int i = cal1.compareTo(cal2);
      System.out.println(i);//cal1等于cal2时,返回0;小于,返回-1;大于,返回1
      
      //日历类-->Date对象
      cal.getTime();
      
      //Date对象-->日历类
      Date date = new Date();
      cal.setTime(date);
      

    JDK1.8 新的日期时间API出现

    背景

    JDK1.0时包含的java.util.Date的大多数方法已被弃用,而JDK1.1时引入的Calendar类也未改善多少,它们面临如下问题:

    1.可变性:像日期和时间的类应该是不可变的

    2.偏移量:Date中年份时从1900开始,月份是从0开始,容易误解

    3.Calendar无法格式化

    4.线程不安全,且无法处理闰秒

    java8引入的时间API

    jkd8 api文档

    //获取当前日期、时间
    LocalDate date = LocalDate.now();
    LocalTime time = LocalTime.now();
    LocalDateTime dateTime = LocalDateTime.now();//LocalDateTime使用频率比LocalDate、LocalTime高
    
    //获取指定日期of():年月日、时分秒,无偏移
    LocalDateTime.of(2021,02,22,23,05,01);
    
    //getXXX()获取相关属性,以LocalDateTime类为例
    LocalDateTime dateTime = LocalDateTime.now();
    System.out.println(dateTime);//2021-02-22T23:15:53.057
    System.out.println(dateTime.getDayOfYear());//53
    System.out.println(dateTime.getDayOfMonth());//22
    System.out.println(dateTime.getDayOfWeek());//MONDAY
    
    //不可变性,通过withXXX()设置相关属性
    LocalDateTime dateTime1 = dateTime.withYear(2020);
    System.out.println("dateTime: "+dateTime);//dateTime: 2021-02-22T23:21:19.657
    System.out.println("dateTime1: "+dateTime1);//dateTime1: 2020-02-22T23:21:19.657
    
    //plusXXX(),进行加操作
    LocalDateTime dateTime = LocalDateTime.now();
    System.out.println(dateTime);//2021-02-22T23:27:49.096
    System.out.println(dateTime.plusYears(1));//2022-02-22T23:27:49.096
    
    //minusXXX(),进行减操作
    LocalDateTime dateTime = LocalDateTime.now();
    System.out.println(dateTime);//2021-02-22T23:27:49.096
    System.out.println(dateTime.minusYears(1));//2020-02-22T23:27:49.096
    

    Instance瞬时点对象

    //now方法创建Instance对象
    Instant instant = Instant.now();
    System.out.println(instant);//2021-02-24T14:29:59.735Z
    //通过毫秒数创建
    Instant instant1 = Instant.ofEpochMilli(1614177554274L);
    System.out.println(instant1);//2021-02-24T14:39:14.274Z
    
    //创建不同时区offsetDateTime对象,添加时间偏移量
    OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
    System.out.println(offsetDateTime);//2021-02-24T22:35:43.848+08:00
    
    //获取时间戳
    long l = instant.toEpochMilli();
    System.out.println(l);//1614177554274
    
    

    DateTimeFormatter

    //实例化
    //方式一:预定义标准格式:
    DateTimeFormatter isoLocalDateTime = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
    DateTimeFormatter isoLocalDate = DateTimeFormatter.ISO_LOCAL_DATE;
    DateTimeFormatter isoLocalTime = DateTimeFormatter.ISO_LOCAL_TIME;
    //格式化
    LocalDateTime localDateTime = LocalDateTime.now();
    String format = isoLocalDateTime.format(localDateTime);
    System.out.println(format);//2021-02-25T23:03:14.758
    //解析
    TemporalAccessor parse = isoLocalDateTime.parse(format);
    System.out.println(parse);//{},ISO resolved to 2021-02-25T23:11:00.366
    
    //方式二:本地化相关格式,如oflocaliedDateTime
    //常量:FormateStyle.LONGFormateStyle.MEDIUMFormateStyle.SHORT
    //适用于格式化LocalDateTime对象
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
    String format1 = dateTimeFormatter.format(localDateTime);
    System.out.println(format1);//2021-2-25 23:25:11
    
    DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
    String format2 = dateTimeFormatter1.format(localDateTime);
    System.out.println(format2);//2021年2月25日 星期四
    
    //方式三:自定义格式
    DateTimeFormatter dateTimeFormatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    LocalDateTime localDateTime1 = LocalDateTime.of(2021, 02, 25, 23, 32, 59);
    //格式化
    String format3 = dateTimeFormatter2.format(localDateTime1);
    System.out.println(format3);//2021-02-25 11:32:59
    
  • 相关阅读:
    Linux 网络流量实时监控工具之ntopng详解
    linux wget 命令用法详解(附实例说明)
    Linux curl使用简单介绍
    数据库中随机查询数据
    【算法】验证码识别基础方法及源码(转)
    CentOS 7静默(无图形化界面)安装Oracle 11g
    史上最详细最全的Linux上安装Oracle的教程-centos7
    如何实现Docker镜像和容器实例的备份迁移
    oozie timezone时区配置
    通过hue提交oozie定时任务
  • 原文地址:https://www.cnblogs.com/zuozs/p/14444333.html
Copyright © 2011-2022 走看看