java 时间对象_java 日期时间对象 LocalDateTime

LocalDateTime 特性

线程安全

强大的API,包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作

相关类

LocalDateTime: 没有时区的日期时间

LocalDate: 没有时区的日期

LocalTime: 没有时区的时间

ZoneId: 时区标识

TemporalAdjusters: 常用的时间调整器

ChronoUnit: 标准的日期时间单位

Instant: 一个瞬时点在时间线上

DateTimeFormatter: 格式化程序打印和解析日期-时间对象

Api

1. 创建 LocalDateTime

```java

// 获取当前的日期时间

System.out.println("Create LocalDateTime_1: " + LocalDateTime.now());

// 通过 LocalDate, LocalTime 获得 LocalDateTime

System.out.println("Create LocalDateTime_2: " + LocalDateTime.of(LocalDate.now(), LocalTime.now()));

// 指定年月日时分秒 获得 LocalDateTime

System.out.println("Create LocalDateTime_3: " + LocalDateTime.of(1997, 11, 17, 11, 11, 11));

// 指定时区 获得 LocalDateTime

System.out.println("Create LocalDateTime_4: " + LocalDateTime.ofInstant(Instant.now(), ZoneId.of("Asia/Shanghai")));

```

复制代码

2. LocalDateTime 运算, 加减, 比较等操作

```java

LocalDateTime today = LocalDateTime.now();

//时间加减 加 plus, 减 minus

System.out.println("1 年后 " + today.plusYears(1));

System.out.println("1 天后 " + today.plusDays(1));

System.out.println("1 年前 " + today.minusYears(1));

System.out.println("1 周前 " + today.minusWeeks(1));

System.out.println("1 月前 " + today.minusMonths(1));

// 时间比较

System.out.println("是否相等: " + today.isEqual(today.minusDays(1)));

System.out.println("Today之后: " + today.isAfter(today.minusDays(1)));

System.out.println("Today之前: " + today.isBefore(today.minusDays(1)));

// 调整日期时间

System.out.println("年调整至 1997 年: " + today.withYear(1997));

System.out.println("月调整 2 月: " + today.withMonth(2));

System.out.println("每月的第一天: " + today.with(TemporalAdjusters.firstDayOfMonth()));

System.out.println("下个月的第一天: " + today.with(TemporalAdjusters.firstDayOfNextMonth()));

System.out.println("每年的最后一天: " + today.with(TemporalAdjusters.lastDayOfYear()));

// 判断是否是闰年

System.out.println("是否是闰年: " + today.toLocalDate().isLeapYear());

//两个日期间的间隔

System.out.println("今天与月末相差多少天: " + today.until(today.with(TemporalAdjusters.lastDayOfMonth()), ChronoUnit.DAYS));

```

复制代码

3. LocalDateTime, String, java.util.Date 相互转换

```java

Date date = new Date();

// java.util.Date 转换为 LocalDateTime 指定时区 CTT(Asia/Shanghai)

ZoneId ctt = ZoneId.of(ZoneId.SHORT_IDS.get("CTT"));

LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ctt);

System.out.println("java.util.Date 转换为 LocalDateTime, 指定时区: " + localDateTime);

// java.util.Date 转换为 LocalDateTime 系统默认时区

ZoneId defaultZone = ZoneId.systemDefault();

System.out.println("java.util.Date 转换为 LocalDateTime, 系统默认时区: " + LocalDateTime.ofInstant(date.toInstant(), defaultZone));

//LocalDateTime 转换为 java.util.Date 指定时区

System.out.println("LocalDateTime 转换为 java.util.Date, 指定时区: " + Date.from(localDateTime.atZone(ctt).toInstant()));

//LocalDateTime 转换为 java.util.Date 系统默认时区

System.out.println("LocalDateTime 转换为 java.util.Date, 系统默认时区: " + Date.from(localDateTime.atZone(defaultZone).toInstant()));

//LocalDateTime 转换为 String

LocalDateTime today = LocalDateTime.now();

System.out.println("LocalDateTime 转换为 String: "+ today.format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")));

System.out.println("LocalDateTime 转换为 String: "+ today.format(DateTimeFormatter.ofPattern("YYYY-MM-dd")));

System.out.println("LocalDateTime 转换为 String: "+ today.format(DateTimeFormatter.ofPattern("MM-dd HH:mm")));

// String 转换为 LocalDateTime

System.out.println("String 转换为 LocalDateTime : " + LocalDateTime.parse("1997-11-17 11:11:11", DateTimeFormatter.ofPattern("yyyy-MM-dd[[ HH][:mm][:ss]]")));

System.out.println("String 转换为 LocalDate : " + LocalDate.parse("1997-11-17", DateTimeFormatter.ofPattern("yyyy-MM-dd")));

System.out.println("String 转换为 LocalTime : " + LocalTime.parse("11:11:11", DateTimeFormatter.ofPattern("HH:mm:ss")));

// 1997-11-17 当String类型时间没有时分秒时, DateTimeFormatter 需要设置为空时的默认值.

final DateTimeFormatter formatter = new DateTimeFormatterBuilder()

.appendPattern("yyyy-MM-dd[[ HH][:mm][:ss]]")

.parseDefaulting(ChronoField.HOUR_OF_DAY, 0) // 时

.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0) // 分

.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0) // 秒

.parseDefaulting(ChronoField.MILLI_OF_SECOND, 0) // 毫秒

.toFormatter();

System.out.println("String 转换为 LocalDateTime : " + LocalDateTime.parse("1997-11-17", formatter));

```

复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值