【Java】jdk 8.0 中的时间日期API

1.日期时间API的迭代

  • jdk 1.0 Date类
  • jdk 1.1 Calender类,一定程度上替换Date类。
  • jdk 1.8 一套新的API

2.前两代存在的问题

  • 可变性:像日期和时间这样的类应该是不可变的。
  • 偏移性:Date中的年份是从1900开始的,而月份都从0开始。
  • 格式化:格式化只对Date管用,Calendar则不行。
  • 线程安全:它们都不是线程安全的,不能处理润秒等。

3.java 8中新的日期时间API涉及到的包

加粗的为常用的。

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

4.LocalDate、LocalTime、LocalDateTime

(1)说明

① 分别表示使用ISO-8601日历系统的日期、时间、日期和时间。提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关信息。
② LocalDateTime使用频率较高。
③ 类似于Calendar。
④ 构造器是私有的。

private LocalDateTime(LocalDate date, LocalTime time) {
    this.date = date;
    this.time = time;
}

(2)常用方法

方法名 描述
now()、now(zoneId zone) 静态方法,根据当前时间创建对象/指定时区的对象
of() 静态方法,根据指定日期/时间创建对象
getDayofMonth()、getDayOfYear() 获得月份天数(1-31)、获得年份天数(1-366)
getDayOfWeek() 获取星期几(返回一个DayOfWeek枚举值)
getMonth() 获得月份,返回一个Month枚举值
getMonthValue()、getYear() 获得月份(1-12)、获得年份
getHour()、getMinute()、getSecond() 获得当前对象对应的小时、分钟、秒
withDayOfMonth()、withDayOfYear()、withMonth()、withYear() 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
plusDays()、plusWeeks()、plusMonths()、plusYears()、plusHours() 向当前对象添加几天、几周、几个月、几天、几小时
minusMonths()、minusWeeks()、minusDays()、minusYears()、minusHours() 从当前对象减去几月、几周、几天、几年、几小时

5.Instant类

表示时间线上的一个瞬时点。表示自1970年1月1日0时0分0秒(UTC时区开始的秒数),类似于java.util.Date类。

(1)常用方法

方法 描述
now() 静态方法,返回默认UTC时区的Instant类的对象
ofEpochMilli(long epochMilli) 静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象
atOffset(ZoneOffset offset) 结合即时的偏移来创建一个OffsetDateTime
toEpochMilli() 返回1970-01-01 00:00:00到当前时间的毫秒数(时间戳)

时间戳:格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

6.日期时间格式化类DateTimeFormatter

  • 格式化或解析日期、时间
  • 类似于SimpleDateFormat

(1)实例化方式

  • 预定义的标准格式:ISO_LOCAL_DATE_TIMEISO_LOCAL_DATEISO_LOCAL_TIME
  • 本地化相关格式:FormatStyle.FULLFormatStyle.LONGFormatStyle.MEDIUMFormatStyle.SHORT
  • 自定义格式:ofPattern("yyyy-MM-dd hh:mm:ss")
//方式一
DateTimeFormatter dtf1 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;

//方式二
DateTimeFormatter dtf2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);

//方式三
DateTimeFormatter dtf3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

(2)常用方法

方法 描述
ofPattern(String pattern) 静态方法,返回一个指定字符串格式的DateTimeFormatter
format(TemporalAccessor t) 格式化一个日期、时间,返回字符串
parse(CharSequence text) 将指定格式的字符序列解析为一个日期、时间
//实例化对象:自定义格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

//格式化:日期时间-->字符串
String str4 = formatter.format(LocalDateTime.now());
System.out.println(str4);   //2022-12-06 02:57:01

//解析:字符串-->日期时间
TemporalAccessor accessor = formatter.parse("2019-02-18 03:52:09");
System.out.println(accessor);
posted @ 2022-11-24 10:58  植树chen  阅读(53)  评论(0编辑  收藏  举报