JDK8时间日期API

1. JDK8以前的时间日期API
1.1 java.lang.System类java

  • public static native long currentTimeMillis();
    • 用于返回当前时间与1970年1月1日0:0:0之间以毫秒为单位的时间差
    •  时间戳

1.2 java.util.Date类sql

  • 两个构造器
    • new Date(); —> 当前时间
    • new Date(Long 毫秒数) — > 根据毫秒数建立指定日期
  • 两个方法的使用
    • toString() 显示当前的年,月,日,时,分,秒
    • getTime() 获取当前date对象的对应的毫秒数(时间戳)
  • java.util.Date 和java.sql.Date 互相转换
    • Date date = new java.sql.Date()
    • java.sql.Date date2 = (java.sql.Date) date;
    • java.sql.Date date3 = new java.sql.Date(new Date().getTime());
  • 1.3 java.text.SimpleDateFormat类
    • Date类的API不易于国际化,大部分被废弃,SimpleDateFormat类 一个与语言环境有关的方式来格式化和解析时间的具体类
    • format() 方法 按照具体的格式格式化时间
    • parse() 方法将字符串解析成时间

1.4 java.util.Calendar 日历类安全

  • 获取Calendar的实例
    • 使用其子类 (GregorianCalendar)的对象
    • 使用Calendar.getInstance()
  • 经常使用方法
  • set()
    • calendar.set(Calendar.DAY_OF_MONTH,22) —> 将日期设置为这个月的第几天
  • get()
    • calendar.get(Calendar.DAY_OF_MONTH)----->这个月的第几天,返回值是int
    • calendar.get(Calendar.DAY_OF_YEAR) —>这一年的第几天
  • add()
    • calendar.add(Calendar.DAY_OF_MONTH,3) ----> 在现有的日期上加3天
  • getTime()
    • calendar.getTime(); —> 返回Date()
  • setTime()
    • calendar.setTime(new Date()) — > 将日期设置为某日期

2 、JDK8新日期时间的API框架

  • 可变性 : 像日期和时间这样的类应该是不可变的,---->返回一个值,原来的对象不变
  • 偏移性 : Date中的年份是从1900开始的,而月份是从0开始的
    • 日期表示须要减 new Date(2020-1900,9-1,8) 这样才能够表示2020年9月8日
  • 格式化; 格式化日期只对Date有用,Calendar则不行
  • 线程不安全的,不能处理闰秒等
  • Java8 吸取了Joda-Time精华,开启了新的API,新的java.time包含了以下子类
    • 本地日期 LocalDate
    • 本地时间 LocalTime
    • 本地日期时间 LocalDateTime
    • 时区 ZonedDateTime
    • 持续时间 Duration

2.1 、JDK8 的新日期的API线程

  • java.time -包含值对象的基础包
  • java.time.chrono - 提供不一样日历系统的访问
  • java.time.format - 格式化和解析时间和日期
  • java.time.temporal - 包含底层框架和扩展特性
  • java.time.zone - 包含时区支持的类

2.二、 LocalDate,LocalTime,LocalDateTimeorm

// LocalDate LocalTime LocalDateTime
// 获取当前时间
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);
System.out.println(localTime);
System.out.println(localDateTime);

// LocalDateTime  使用频率较高
// of() 设置指定的年月日时分秒  体现不偏移性
LocalDateTime dateTime = LocalDateTime.of(2019, 04, 10, 23, 03);
System.out.println(dateTime);

// getXxx()
System.out.println(dateTime.getDayOfMonth());
System.out.println(dateTime.getDayOfWeek());
System.out.println(dateTime.getMonth());
System.out.println(dateTime.getMinute());
System.out.println(dateTime.getMonthValue());

// withXxx   体现不可变性
LocalDate localDate1 = localDate.withDayOfMonth(12);
System.out.println(localDate);
System.out.println(localDate1);
// 设置分钟
LocalDateTime localDateTime1 = localDateTime.withMinute(20);
System.out.println(localDateTime);
System.out.println(localDateTime1);

// plusXxx()   当前的时间作加法
LocalDate localDate2 = localDate.plusMonths(1);
System.out.println(localDate);
System.out.println(localDate2);

// 结果
   2019-04-10
   23:14:42.994
   2019-04-10T23:14:42.994
   2019-04-10T23:03
   10
   WEDNESDAY
   APRIL
   3
   4
   2019-04-10
   2019-04-12
   2019-04-10T23:14:42.994
   2019-04-10T23:20:42.994
   2019-04-10
   2019-05-10


// 获取本初子午线的标准时间
Instant now = Instant.now();
System.out.println(now);    // 2019-04-10T15:19:51.640Z

// 东八区的时间       偏移量
OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime); // 2019-04-10T23:21:47.598+08:00

// 距离1970年1月1日0:0:0(UTC) 开始的毫秒数
long l = now.toEpochMilli();
System.out.println(l);

// 根据偏移量获取时间
Instant instant = Instant.ofEpochMilli(l);
System.out.println(instant);
 --------------------结果------------------------
   2019-04-10T15:23:52.587Z
   2019-04-10T23:23:52.587+08:00
   1554909832587
   2019-04-10T15:23:52.587Z


// 1. 预约义的标准格式  ISO_LOCAL_DATE_TIME,ISO_LOCAL_DATE,ISO_LOCAL_TIME
// 格式化日期 --- > 字符串
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
LocalDateTime now1 = LocalDateTime.now();
System.out.println(formatter.format(now1));  //2019-04-14T11:26:07.555
System.out.println(now1);    //2019-04-14T11:26:07.555

// 字符串--->时间
TemporalAccessor parse = formatter.parse("2019-04-14T11:26:07.555");
System.out.println(parse);

// 方式二
// 本地化相关格式      ofLocalizedDateTime()
// FormatStyle.LONG     /   FormatStyle.MEDIUM  /   FormatStyle.SHORT
DateTimeFormatter dateTime2 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
System.out.println(dateTime2.format(now1));       //2019年4月14日 上午11时30分54秒

// 方式三 自定义格式
// ofPattern("yyyy-MM-dd hh:mm:ss") -->和SimpleDateFormat类似 

 --------------------结果------------------------
2019-12-25T14:26:06.05
2019-12-25T14:26:06.050
{},ISO resolved to 2019-04-14T11:26:07.555
2019年12月25日 下午02时26分06秒
相关文章
相关标签/搜索