Java 时间日期操作
文章目录
LocalDate LocalTime LocalDateTime
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
LocalDate
LocalTime
LocalDateTime
遵循的是国际标准ISO 8601
获取当前日期
LocalDate ld = LocalDate.now();
int year = ld.getYear();
int month = ld.getMonth().getValue();
int day = ld.getDayOfMonth();
月 日 不是从 0 开始, 1 月 就是 1, 不再是 0
构建 LocalDate
LocalDate ld = LocalDate.parse("2020-12-09");
LocalDate ld_2 = LocalDate.parse("12-09-2020", DateTimeFormatter.ofPattern("MM-dd-yyyy"));
LocalDate ld_3 = LocalDate.of(2020, 12 , 9);
LocalDate 默认使用 ISO 8601 标准,也可以指定日期格式
时间
获取本地时间
LocalTime lt = LocalTime.now();
可以分别获取 时 分 秒 纳秒
int hour = lt.getHour();
int second = lt.getSecond();
int minute = lt.getMinute();
int nano = lt.getNano();
构建指定本地时间
LocalTime lt = LocalTime.parse("13:24:30");
LocalTime lt_1 = LocalTime.of(13, 24, 30, 0);
LocalTime lt_2 = LocalTime.parse("13:24:30", DateTimeFormatter.ofPattern("H:i:s"));
日期时间
获取指定本地时间
LocalDateTime ldt = LocalDateTime.now();
可以分别获取 年 月 日 时 分 秒 纳秒
int year = ldt.getYear();
int month = ldt.getMonth().getValue();
int day = ldt.getDayOfMonth();
int hour = ldt.getHour();
int second = ldt.getSecond();
int minute = ldt.getMinute();
int nano = ldt.getNano();
构建本地日期时间
LocalDateTime m_ldt_1 = LocalDateTime.of(2021, 6, 11, 23, 12, 24, 3000);
// 使用 LocalDate 和 LocalTime 构建
LocalDate mld = LocalDate.of(2021, 6, 11);
LocalTime mlt = LocalTime.of(23, 12, 24);
LocalDateTime m_ldt_2 = LocalDateTime.of(mld, mlt);
// 解析默认格式
LocalDateTime s_ldt_1 = LocalDateTime.parse("2021-12-13T23:12:24");
// 解析自定义格式
LocalDateTime s_ldt_2 = LocalDateTime.parse("2021-12-13 23:12:24", DateTimeFormatter.ofPattern("y-M-d H:m:s"));
时区
ZoneId
获取当前时区
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId);
获取指定时区
ZoneId zoneId = ZoneId.of("America/New_York");
System.out.println(zoneId);
ZonedDateTime
获取当前时区的时期时间
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("本地时区" + zonedDateTime);
// 本地时区 2021-11-26T08:34:05.919145+08:00[Asia/Shanghai]
获取于此同时, 纽约日期时间
ZonedDateTime zonedDateTimeNewYork = ZonedDateTime.now(ZoneId.of("America/New_York"));
System.out.println("纽约时区" + zonedDateTimeNewYork);
// 纽约时区 2021-11-25T19:34:05.929306-05:00[America/New_York]
从一个时区获取另一个时区的时间
LocalDateTime ldt = LocalDateTime.of(2021, 6, 11, 23, 12, 24, 3000);
ZoneId zidShangHai = ZoneId.of("Asia/Shanghai");
ZonedDateTime zdtShangHai = ldt.atZone(zidShangHai);
ZoneId zidNewYork = ZoneId.of("America/New_York");
ZonedDateTime zdt_new_york = zdtShangHai.withZoneSameInstant(zidNewYork);
System.out.println(zdt_new_york);
ZonedDateTime转换
ZonedDateTime 转 long
ZonedDateTime zonedDateTime = ZonedDateTime.now();
long timestamps = zonedDateTime.toEpochSecond();
System.out.println("本地时间戳" + timestamps);
// 本地时间戳 1637887053
时间戳表示 自 1970年0时0分0秒 到当前时间的秒数
- toLocalDateTime
- toLocalDate
- toLocalTime
LocalDateTime 转 ZonedDateTime
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt_local = ldt.atZone(ZoneId.systemDefault());
ZonedDateTime zdt_new_york = ldt.atZone(ZoneId.of("America/New_York"));
时间调整
with
支持 LocalDateTime LocalDate LocalTime ZoneDateTime
- withYear 设置指定年
- withMonth 设置指定月
- withDayOfMonth
- withHour
- withMinute
- withSecond
- withNano
运算
在当前日期时间基础上, 添加指定的时间, 比如: plusYears(2)
表示增加 2 年
plus
表示增加, minus
表示减少
plusYears()
minusYears()
年plusMonths()
minusMonths()
月plusDays()
minusDays()
日plusWeeks()
minusWeeks()
周plusHours()
minusHours()
时plusMinutes()
minusMinutes()
分plusSeconds()
minusSeconds()
秒plusNanos()
minusNanos()
纳秒
时间片
时间片
Period Duration 继承自, TemporalAmount 表示一段日期时间; Period 表示一段日期, Duration 表示一段时间
Duration.ofDays(1)
Duration.ofHours(1)
- …
Period.ofYears(1)
- …
运算
plus(TemporalAmount)
增加 时间片
minus(TemporalAmount)
减少 时间片
LocalDateTime ldt = LocalDateTime.of(2021, 1, 12, 13, 24, 12);
Duration five_minute = Duration.ofMinutes(10);
LocalDateTime ldt_new = ldt.plus(five_minute);
// LocalDateTime ldt_new = ldt.minus(five_minute);
System.out.println(ldt_new);
// 2021-01-12T13:34:12
日期时间字符串
时间日期格式
ZonedDateTime zonedDateTime = ZonedDateTime.now();
String str_t = zonedDateTime.format(DateTimeFormatter.ofPattern("MM-dd-yyyy"));
Symbol Meaning Presentation Examples
------ ------- ------------ -------
G era text AD; Anno Domini; A
y year-of-era year 2004; 04
D day-of-year number 189
M/L month-of-year number/text 7; 07; Jul; July; J
d day-of-month number 10
g modified-julian-day number 2451334
Q/q quarter-of-year number/text 3; 03; Q3; 3rd quarter
Y week-based-year year 1996; 96
w week-of-week-based-year number 27
W week-of-month number 4
E day-of-week text Tue; Tuesday; T
e/c localized day-of-week number/text 2; 02; Tue; Tuesday; T
F day-of-week-in-month number 3
a am-pm-of-day text PM
h clock-hour-of-am-pm (1-12) number 12
K hour-of-am-pm (0-11) number 0
k clock-hour-of-day (1-24) number 24
H hour-of-day (0-23) number 0
m minute-of-hour number 30
s second-of-minute number 55
S fraction-of-second fraction 978
A milli-of-day number 1234
n nano-of-second number 987654321
N nano-of-day number 1234000000
V time-zone ID zone-id America/Los_Angeles; Z; -08:30
v generic time-zone name zone-name Pacific Time; PT
z time-zone name zone-name Pacific Standard Time; PST
O localized zone-offset offset-O GMT+8; GMT+08:00; UTC-08:00
X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15
x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15
Z zone-offset offset-Z +0000; -0800; -08:00
p pad next pad modifier 1
时区表
<?xml version="1.0" encoding="UTF-8"?>
<timezones>
<timezone id="Asia/Shanghai">中国标准时间 (北京)</timezone>
<timezone id="Asia/Hong_Kong">香港时间 (香港)</timezone>
<timezone id="Asia/Taipei">台北时间 (台北)</timezone>
<timezone id="Asia/Seoul">首尔</timezone>
<timezone id="Asia/Tokyo">日本时间 (东京)</timezone>
<timezone id="America/New_York">美国东部时间 (纽约)</timezone>
<timezone id="America/Denver">美国山区时间 (丹佛)</timezone>
<timezone id="America/Costa_Rica">美国中部时间 (哥斯达黎加)</timezone>
<timezone id="America/Chicago">美国中部时间 (芝加哥)</timezone>
<timezone id="America/Mexico_City">美国中部时间 (墨西哥城)</timezone>
<timezone id="America/Regina">美国中部时间 (里贾纳)</timezone>
<timezone id="America/Los_Angeles">美国太平洋时间 (洛杉矶)</timezone>
<timezone id="Pacific/Majuro">马朱罗</timezone>
<timezone id="Pacific/Midway">中途岛</timezone>
<timezone id="Pacific/Honolulu">檀香山</timezone>
<timezone id="America/Anchorage">安克雷奇</timezone>
<timezone id="America/Tijuana">美国太平洋时间 (提华纳)</timezone>
<timezone id="America/Phoenix">美国山区时间 (凤凰城)</timezone>
<timezone id="America/Chihuahua">奇瓦瓦</timezone>
<timezone id="America/Bogota">哥伦比亚时间 (波哥大)</timezone>
<timezone id="America/Caracas">委内瑞拉时间 (加拉加斯)</timezone>
<timezone id="America/Barbados">大西洋时间 (巴巴多斯)</timezone>
<timezone id="America/Manaus">亚马逊标准时间 (马瑙斯)</timezone>
<timezone id="America/St_Johns">纽芬兰时间 (圣约翰)</timezone>
<timezone id="America/Santiago">圣地亚哥</timezone>
<timezone id="America/Argentina/Buenos_Aires">布宜诺斯艾利斯</timezone>
<timezone id="America/Godthab">戈特霍布</timezone>
<timezone id="America/Montevideo">乌拉圭时间 (蒙得维的亚)</timezone>
<timezone id="America/Sao_Paulo">圣保罗</timezone>
<timezone id="Atlantic/South_Georgia">南乔治亚</timezone>
<timezone id="Atlantic/Azores">亚述尔群岛</timezone>
<timezone id="Atlantic/Cape_Verde">佛得角</timezone>
<timezone id="Africa/Casablanca">卡萨布兰卡</timezone>
<timezone id="Europe/London">格林尼治标准时间 (伦敦)</timezone>
<timezone id="Europe/Amsterdam">中欧标准时间 (阿姆斯特丹)</timezone>
<timezone id="Europe/Belgrade">中欧标准时间 (贝尔格莱德)</timezone>
<timezone id="Europe/Brussels">中欧标准时间 (布鲁塞尔)</timezone>
<timezone id="Europe/Sarajevo">中欧标准时间 (萨拉热窝)</timezone>
<timezone id="Africa/Brazzaville">西部非洲标准时间 (布拉扎维)</timezone>
<timezone id="Africa/Windhoek">温得和克</timezone>
<timezone id="Asia/Amman">东欧标准时间 (安曼)</timezone>
<timezone id="Europe/Athens">东欧标准时间 (雅典)</timezone>
<timezone id="Asia/Beirut">东欧标准时间 (贝鲁特)</timezone>
<timezone id="Africa/Cairo">东欧标准时间 (开罗)</timezone>
<timezone id="Europe/Helsinki">东欧标准时间 (赫尔辛基)</timezone>
<timezone id="Asia/Jerusalem">以色列时间 (耶路撒冷)</timezone>
<timezone id="Africa/Harare">中部非洲标准时间 (哈拉雷)</timezone>
<timezone id="Europe/Minsk">明斯克</timezone>
<timezone id="Asia/Baghdad">巴格达</timezone>
<timezone id="Europe/Moscow">莫斯科</timezone>
<timezone id="Asia/Kuwait">科威特</timezone>
<timezone id="Africa/Nairobi">东部非洲标准时间 (内罗毕)</timezone>
<timezone id="Asia/Tehran">伊朗标准时间 (德黑兰)</timezone>
<timezone id="Asia/Baku">巴库</timezone>
<timezone id="Asia/Tbilisi">第比利斯</timezone>
<timezone id="Asia/Yerevan">埃里温</timezone>
<timezone id="Asia/Dubai">迪拜</timezone>
<timezone id="Asia/Kabul">阿富汗时间 (喀布尔)</timezone>
<timezone id="Asia/Karachi">卡拉奇</timezone>
<timezone id="Asia/Oral">乌拉尔</timezone>
<timezone id="Asia/Yekaterinburg">叶卡捷林堡</timezone>
<timezone id="Asia/Calcutta">加尔各答</timezone>
<timezone id="Asia/Colombo">科伦坡</timezone>
<timezone id="Asia/Katmandu">尼泊尔时间 (加德满都)</timezone>
<timezone id="Asia/Almaty">阿拉木图</timezone>
<timezone id="Asia/Rangoon">缅甸时间 (仰光)</timezone>
<timezone id="Asia/Krasnoyarsk">克拉斯诺亚尔斯克</timezone>
<timezone id="Asia/Bangkok">曼谷</timezone>
<timezone id="Asia/Irkutsk">伊尔库茨克时间 (伊尔库茨克)</timezone>
<timezone id="Asia/Kuala_Lumpur">吉隆坡</timezone>
<timezone id="Australia/Perth">佩思</timezone>
<timezone id="Asia/Yakutsk">雅库茨克时间 (雅库茨克)</timezone>
<timezone id="Australia/Darwin">达尔文</timezone>
<timezone id="Australia/Brisbane">布里斯班</timezone>
<timezone id="Asia/Vladivostok">海参崴时间 (符拉迪沃斯托克)</timezone>
<timezone id="Pacific/Guam">关岛</timezone>
<timezone id="Australia/Adelaide">阿德莱德</timezone>
<timezone id="Australia/Hobart">霍巴特</timezone>
<timezone id="Australia/Sydney">悉尼</timezone>
<timezone id="Asia/Magadan">马加丹时间 (马加丹)</timezone>
<timezone id="Pacific/Auckland">奥克兰</timezone>
<timezone id="Pacific/Fiji">斐济</timezone>
<timezone id="Pacific/Tongatapu">东加塔布</timezone>
</timezones>