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秒)起至现在的总秒数。
- 格式化或解析日期、时间
- 类似于SimpleDateFormat
(1)实例化方式
- 预定义的标准格式:
ISO_LOCAL_DATE_TIME
、ISO_LOCAL_DATE
、ISO_LOCAL_TIME
- 本地化相关格式:
FormatStyle.FULL
、FormatStyle.LONG
、FormatStyle.MEDIUM
、FormatStyle.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); |
| |
| |
| TemporalAccessor accessor = formatter.parse("2019-02-18 03:52:09"); |
| System.out.println(accessor); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本