1. 本地时间
1. 概念
LocalDate
、LocalTime
、LocalDateTime
类的实例是不可变的对象,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。
2. 常用方法
now
:静态方法,根据当前时间创建对象of
:静态方法,根据指定日期/时间创建对象plusDays,plusWeeks,plusMonths,plusYears
:向当前LocalDate
对象添加几天、几周、几个月、几年minusDays,minusWeeks,minusMonths,minusYears
:从当前LocalDate
对象减去几天、几周、几个月、几年plus,minus
:添加或减少一个Duration
或Period
withDayOfMonth,withDayOfYear,withMonth,withYear
:将月份天数、年份天数、月份、年份修改为指定的值并返回新的LocalDate
对象getDayOfYear
:获得年份天数(1~366)getDayOfWeek
:获得星期几(返回一个DayOfWeek
枚举值)getMonth
:获得月份, 返回一个Month
枚举值getMonthValue
:获得月份(1~12)getYear
:获得年份until
:获得两个日期之间的Period
对象,或者指定ChronoUnits
的数字isBefore,isAfter
:比较两个LocalDate
isLeapYear
:判断是否是闰年
1 | // 1. 获取当前系统时间 |
2. 时间戳
2.1. 概念
Instant
它是以Unix元年(传统的设定为UTC时区1970年1月1日午夜时分)开始所经历的描述进行运算 。
2.2. 常用方法
1 | // 1. 获取当前时间戳 |
3. 间隔
3.1. 概念
Duration
:用于计算两个 “时间” 间隔。
Period
:用于计算两个 “日期” 间隔 。
3.2. 常用方法
1 | Instant instant_1 = Instant.now(); |
3.3. 注意
1. Period.between()
Period.between(LocalDate startDateInclusive, LocalDate endDateExclusive)
方法计算时间间隔时,会将计算结果拆成年、月、日,3个数字,换算之后的和,才是传统意义上的间隔多少天。
1 | // 间隔 1年2月21天,因此分别存储在年、月、日中 |
2. 如何计算间隔
ChronoUnit
: 时间单位的枚举类,其between()
方法,可以计算相应单位时间
1 | LocalDateTime startTime = LocalDateTime.of(2022, 8, 10, 15, 2, 3); |
toEpochDay
: LocalDate 类中方法,可以计算相差多少天
1 | LocalDate start = LocalDate.of(2022, 8, 10); |
4. 日期操作
4.1. 概念
TemporalAdjuster
:时间校正器。有时我们可能需要获取例如:将日期调整到“下个周日”等操作。
TemporalAdjusters
:该类通过静态方法提供了大量的常用 TemporalAdjuster
的实现。
4.2. 常用方法
1 | LocalDateTime localDateTime1 = LocalDateTime.now(); |
4.3. 注意
- 四个方法区别, 带
OrSame
的方法在所求的周时间与输入相同时则会返回输入时间, 否则返回上一个或下一个周期时间
TemporalAdjusters.previous(DayOfWeek dayOfWeek)
TemporalAdjusters.previousOrSame(DayOfWeek dayOfWeek)
TemporalAdjusters.next(DayOfWeek dayOfWeek)
TemporalAdjusters.nextOrSame(DayOfWeek dayOfWeek)
1 | // 如果今天是周一, 再求上或下周周一时间, OrSame 会返回今天, 其他则不会 |
5. 解析与格式化
5.1. 概念
java.time.format.DateTimeFormatter
类:该类提供了三种格式化方法:
- 预定义的标准格式
- 语言环境相关的格式
- 自定义的格式
5.2. 常用方法
1 | DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ISO_DATE; |
6. 时区
6.1. 概念
带时区的时间为分别为:ZonedDate、 ZonedTime、 ZonedDateTime
。其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式,例如 :Asia/Shanghai
等。
ZoneId
:该类中包含了所有的时区信息getAvailableZoneIds()
:可以获取所有时区时区信息of(id)
:用指定的时区信息获取ZoneId
对象
6.2. 常用方法
1 | // 获取所有的时区 |
7. 与传统时间转换
类 | to | from |
---|---|---|
iava.time.LocalDate <-> java.util.Date | Date.valueOf(localDate) | date.toLocalDate() |
iava.time.LocalTime <-> java.util.Date | Date.valueOf(localDate) | date.toLocalTime() |
iava.time.LocalDateTime <-> java.sgl.Timestamp | Timestamp.valueOf(localDateTime) | timestamp.toLocalDateTime() |
java.time.Instant <-> java.util.Date | Date.from(instant) | date.tolnstant() |
java.time.Instant <-> java.sgl.Timestamp | Timestamp.from(instant) | timestamp.tolnstant() |
java.time.Zoneld <-> java.util.TimeZone | Timezone.getTimeZone(id) | timeZone.toZoneld() |
java.time.format.DateTimeFormatter <-> java.text DateFormat | formatter.toFormat() | 无 |
java.time.ZonedDateTime <-> java.util.GregorianCalendar | GregorianCalendar.from(zonedDateTime) | cal.toZonedDateTime() |
8. 预定义格式
可以直接使用的 format :
1 | DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE; |
Formatter 实例 | 举例 |
---|---|
BASIC_ISO_DATE |
20181203 |
ISO_LOCAL_DATE |
2018-12-03 |
ISO_OFFSET_DATE |
2018-12-03+01:00 |
ISO_DATE |
2018-12-03+01:00 ; 2018-12-03 |
ISO_LOCAL_TIME |
11:15:30 |
ISO_OFFSET_TIME |
11:15:30+01:00 |
ISO_TIME |
11:15:30+01:00 ; 11:15:30 |
ISO_LOCAL_DATE_TIME |
2018-12-03T11:15:30 |
ISO_OFFSET_DATE_TIME |
2018-12-03T11:15:30+01:00 |
ISO_ZONED_DATE_TIME |
2018-12-03T11:15:30+01:00[Europe/Paris] |
ISO_DATE_TIME |
2018-12-03T11:15:30+01:00[Europe/Paris] |
ISO_ORDINAL_DATE |
2018-337 |
ISO_WEEK_DATE |
2018-W48-6 |
ISO_INSTANT |
2018-12-03T11:15:30Z |
RFC_1123_DATE_TIME |
Tue, 3 Jun 2018 11:05:30 GMT |
9. 自定义格式
自定义日期格式模式
符号 | 含义 | 举例 | 备注 |
---|---|---|---|
G |
era | AD; Anno Domini; A | 公元 |
u |
year | 2018; 18 | 可正可负, 表示公元前后 |
y |
year-of-era | 2018; 18 | 总是正 |
D |
day-of-year | 180 | 日, 取值 1 -366 |
d |
day-of-month | 11 | 日 |
M/L |
month-of-year | 7; 07; Jul; July; J | 月 |
g |
modified-julian-day | 2451334 | |
Q/q |
quarter-of-year | 3; 03; Q3; 3rd quarter | 季度 |
Y |
week-based-year | 1999; 99 | |
w |
week-of-week-based-year | 25 | |
W |
week-of-month | 3 | |
E |
day-of-week | Tue; Tuesday; T | |
e/c |
localized day-of-week | 2; 02; Tue; Tuesday; T | |
F |
day-of-week-in-month | 2 | |
a |
am-pm-of-day | AM | |
h |
clock-hour-of-am-pm (1-12) | 12 | |
K |
hour-of-am-pm (0-11) | 0 | |
k |
clock-hour-of-day (1-24) | 24 | |
H |
hour-of-day (0-23) | 0 | |
m |
minute-of-hour | 35 | |
s |
second-of-minute | 50 | |
S |
fraction-of-second | 970 | |
A |
milli-of-day | 1234 | |
n |
nano-of-second | 987654321 | |
N |
nano-of-day | 1234000000 | |
V |
time-zone ID | America/Los_Angeles; Z; -08:30 | |
v |
generic time-zone name | Pacific Time; PT | |
z |
time-zone name | Pacific Standard Time; PST | |
O |
localized zone-offset | GMT+8; GMT+08:00; UTC-08:00 | |
X |
zone-offset ‘Z’ for zero | Z; -08; -0830; -08:30; -083015; -08:30:15 | |
x |
zone-offset | +0000; -08; -0830; -08:30; -083015; -08:30:15 | |
Z |
zone-offset | +0000; -0800; -08:00 | |
p |
pad next | 1 | |
' |
escape for text | ||
'' |
single quote | ||
[ |
optional section start | ||
] |
optional section end |