Java 时间日期操作

Java 时间日期操作

文章目录

  • Java 时间日期操作
    • LocalDate LocalTime LocalDateTime
      • 时间
      • 日期时间
    • 时区
      • ZoneId
      • ZonedDateTime
      • ZonedDateTime转换
    • 时间调整
      • with
      • 运算
      • 时间片
      • 时间片
      • 运算
    • 日期时间字符串
      • 时间日期格式
    • 时区表

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

时区表



	中国标准时间 (北京)
	香港时间 (香港)
	台北时间 (台北)
	首尔
	日本时间 (东京)
	美国东部时间 (纽约)
	美国山区时间 (丹佛)
	美国中部时间 (哥斯达黎加)
    美国中部时间 (芝加哥)
    美国中部时间 (墨西哥城)
    美国中部时间 (里贾纳)
    美国太平洋时间 (洛杉矶)
    马朱罗
    中途岛
    檀香山
    安克雷奇
    美国太平洋时间 (提华纳)
    美国山区时间 (凤凰城)
    奇瓦瓦
    哥伦比亚时间 (波哥大)
    委内瑞拉时间 (加拉加斯)
    大西洋时间 (巴巴多斯)
    亚马逊标准时间 (马瑙斯)
    纽芬兰时间 (圣约翰)
    圣地亚哥
    布宜诺斯艾利斯
    戈特霍布
    乌拉圭时间 (蒙得维的亚)
    圣保罗
    南乔治亚
    亚述尔群岛
    佛得角
    卡萨布兰卡
    格林尼治标准时间 (伦敦)
    中欧标准时间 (阿姆斯特丹)
    中欧标准时间 (贝尔格莱德)
    中欧标准时间 (布鲁塞尔)
    中欧标准时间 (萨拉热窝)
    西部非洲标准时间 (布拉扎维)
    温得和克
    东欧标准时间 (安曼)
    东欧标准时间 (雅典)
    东欧标准时间 (贝鲁特)
    东欧标准时间 (开罗)
    东欧标准时间 (赫尔辛基)
    以色列时间 (耶路撒冷)
    中部非洲标准时间 (哈拉雷)
    明斯克
    巴格达
    莫斯科
    科威特
    东部非洲标准时间 (内罗毕)
    伊朗标准时间 (德黑兰)
    巴库
    第比利斯
    埃里温
    迪拜
    阿富汗时间 (喀布尔)
    卡拉奇
    乌拉尔
    叶卡捷林堡
    加尔各答
    科伦坡
    尼泊尔时间 (加德满都)
    阿拉木图
    缅甸时间 (仰光)
    克拉斯诺亚尔斯克
    曼谷
    伊尔库茨克时间 (伊尔库茨克)
    吉隆坡
    佩思
    雅库茨克时间 (雅库茨克)
    达尔文
    布里斯班
    海参崴时间 (符拉迪沃斯托克)
    关岛
    阿德莱德
    霍巴特
    悉尼
    马加丹时间 (马加丹)
    奥克兰
    斐济
    东加塔布

你可能感兴趣的:(Java,Java)