烟雨江南zuo

导航

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.LONG\FormateStyle.MEDIUM\FormateStyle.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

posted on 2021-02-28 11:12  烟雨江南zuo  阅读(132)  评论(0编辑  收藏  举报