时间相关API

Java时间相关API

Instant

相加和相减

同理minus

Instant now = Instant.now();

// 在当前时间基础上加上1纳秒
Instant plusNanos = now.plusNanos(1L);
// 在当前时间基础上加上1毫秒
Instant plusMillis = now.plusMillis(1L);
// 在当前时间基础上再加上1秒
Instant seconds = now.plusSeconds(1L);
Duration between = Duration.between(now, seconds);
// PT1S
System.out.println(between);
System.out.println(plusNanos);
System.out.println(plusMillis);

转换和判断

Instant now = Instant.now();
// 加上一天
Instant end = now.plus(1L, ChronoUnit.DAYS);
Duration between = Duration.between(now, end);

// 将 Duration.between 相差时间 转成纳秒
long nanos = between.toNanos();
System.out.println(nanos);
// 将 Duration.between 相差时间 转成毫秒
long millis = between.toMillis();
System.out.println(millis);
// 将 Duration.between 相差时间 转成天数
long days = between.toDays();
System.out.println(days);
// 将 Duration.between 相差时间 转成小时
long hours = between.toHours();
System.out.println(hours);


// 判断是否为0
boolean zero = between.isZero();
System.out.println(zero);

// 是否为负数
boolean negative = between.isNegative();
System.out.println(negative);

LocalDate

当前时间和转换

LocalDate now = LocalDate.now();
// 2024-07-29
System.out.println(now);

LocalDate plusLocateDate = now.plusMonths(1);
// 2024-08-29
System.out.println(plusLocateDate);

// 2099-02-12
LocalDate localDate = LocalDate.of(2099, 2, 12);
System.out.println(localDate);

With相关

将时间修改成某一天

LocalDate parse = LocalDate.of(2001, 2, 12);

// 将parse日期的月份修改为1月
LocalDate withMonth = parse.withMonth(1);
// 2001-01-12
System.out.println(withMonth);

// 将parse日期的月份修改为 2024 年
LocalDate localDate = parse.withYear(2024);
// 2024-02-12
System.out.println(localDate);

// 将parse日期的月份修改为 年份的第一天
LocalDate withDayOfYear = parse.withDayOfYear(1);
// 2001-01-01
System.out.println(withDayOfYear);

// TemporalField和对应的值来指定要修改的字段和新的值
LocalDate with = parse.withYear(2024);
// LocalDate with = parse.with(ChronoField.YEAR, 2024);
System.out.println(with);

Get相关

LocalDate parse = LocalDate.of(2001, 2, 12);

// 获取日期的年表(Chronology),通常是ISO
IsoChronology chronology = parse.getChronology();
System.out.println(chronology);

// 获取日期的纪元(Era),通常是CE(Common Era)
IsoEra era = parse.getEra();
System.out.println(era);

// 获取日期的年份
long parseLong = parse.getLong(ChronoField.YEAR);
System.out.println(parseLong);

// 获取日期的年份
int year = parse.getYear();
System.out.println(year);

// 获取日期是星期几
DayOfWeek dayOfWeek = parse.getDayOfWeek();
int value = dayOfWeek.getValue();
System.out.println(value);

// 获取日期是当月的第几天
int dayOfMonth = parse.getDayOfMonth();
System.out.println(dayOfMonth);

// 获取日期是当年的第几天
int dayOfYear = parse.getDayOfYear();
System.out.println(dayOfYear);

// 获取日期的月份
Month month = parse.getMonth();
int monthValue = month.getValue();
System.out.println(monthValue);

// 获取日期的月份
int parseMonthValue = parse.getMonthValue();
System.out.println(parseMonthValue);

// 获取指定字段的有效值范围
// 对象将包含年份字段的有效值范围,可以用于确定该字段的最小和最大值。
ValueRange valueRange = parse.range(ChronoField.YEAR);
System.out.println(valueRange.getMinimum());
System.out.println(valueRange.getMaximum());

of和判断

LocalDate parse = LocalDate.of(2001, 2, 12);

// 判断日期是否在指定日期之后
boolean isAfter = parse.isAfter(LocalDate.of(2000, 1, 1));
System.out.println("Is after 2000-01-01: " + isAfter);

// 判断日期是否在指定日期之前
boolean isBefore = parse.isBefore(LocalDate.of(2020, 1, 1));
System.out.println("Is before 2020-01-01: " + isBefore);

// 判断日期是否与指定日期相等
boolean isEqual = parse.isEqual(LocalDate.of(2001, 2, 12));
System.out.println("Is equal to 2001-02-12: " + isEqual);

// 判断是否支持指定的字段
boolean isSupported = parse.isSupported(ChronoField.DAY_OF_MONTH);
System.out.println("Is supported DAY_OF_MONTH: " + isSupported);

// 判断是否为闰年
boolean isLeapYear = parse.isLeapYear();
System.out.println("Is leap year: " + isLeapYear);

ZonedDateTime

转换of和当前时间

ZonedDateTime shanghai = ZonedDateTime.now();
// 2024-07-30T09:07:17.131365900+08:00[Asia/Shanghai]
System.out.println(shanghai);

ZoneId zoneId = ZoneId.of("Europe/Paris");
// 设置时区为巴黎
ZonedDateTime paris = ZonedDateTime.now(zoneId);
// 2024-07-30T07:46:52.456072600+02:00[Europe/Paris]
System.out.println(paris);

时间相加减

减操作API与之相同

ZoneId zoneId = ZoneId.of("Europe/Paris");

// 2023-02-02T11:02:02.000000002+01:00[Europe/Paris]
ZonedDateTime zonedDateTime = ZonedDateTime.of(2023, 2, 2, 11, 2, 2, 2, zoneId);
System.out.println(zonedDateTime);

// 2024-07-30T12:12+02:00[Europe/Paris]
ZonedDateTime dateTime = ZonedDateTime.of(LocalDate.now(), LocalTime.of(12, 12), zoneId);
System.out.println(dateTime);

// 加 3000 纳秒
ZonedDateTime plussedNanos = dateTime.plusNanos(3000);
System.out.println(plussedNanos);

// 加 3600 秒
ZonedDateTime plusSeconds = dateTime.plusSeconds(3600);
System.out.println(plusSeconds);

// 加3分钟
ZonedDateTime plusMinutes = dateTime.plusMinutes(3);
System.out.println(plusMinutes);

// 加3个星期
ZonedDateTime plussedWeeks = dateTime.plusWeeks(3L);
System.out.println(plussedWeeks);

// 在原基础上加 2 个星期
ZonedDateTime plusWeeks = dateTime.plusWeeks(2);
System.out.println(plusWeeks);

// 加 3 个月
ZonedDateTime plussedMonths = dateTime.plusMonths(3);
System.out.println(plussedMonths);

// 加 3 年
ZonedDateTime plussedYears = dateTime.plusYears(3);
System.out.println(plussedYears);

with设置相关

ZonedDateTime zonedDateTime = ZonedDateTime.now();

// 将年份设置为2024年
ZonedDateTime withedYear = zonedDateTime.withYear(2024);
System.out.println(withedYear);

// 将月份设置为6月
ZonedDateTime withedMonth = zonedDateTime.withMonth(6);
System.out.println(withedMonth);

// 当前年的第200天
ZonedDateTime withedDayOfYear = zonedDateTime.withDayOfYear(200);
System.out.println(withedDayOfYear);

// 当前月的第26天
ZonedDateTime withedDayOfMonth = zonedDateTime.withDayOfMonth(26);
System.out.println(withedDayOfMonth);

// 当前天的 16 小时
ZonedDateTime withedHour = zonedDateTime.withHour(16);
System.out.println(withedHour);

// 当前时间的 第16 分钟
ZonedDateTime withedMinute = zonedDateTime.withMinute(16);
System.out.println(withedMinute);

// 设置当前秒为 16 秒
ZonedDateTime withedSecond = zonedDateTime.withSecond(16);
System.out.println(withedSecond);

// 设置为1666纳秒
ZonedDateTime withedNano = zonedDateTime.withNano(1666);
System.out.println(withedNano);

// 使用withZoneSameLocal()方法将时区调整为相同的本地时区,不改变时间
ZonedDateTime sameLocal = zonedDateTime.withZoneSameLocal(ZoneId.of("America/New_York"));
System.out.println("Same Local Zone: " + sameLocal);

// 使用withZoneSameInstant()方法将时区调整为相同的即时时区,调整时间以保持相同的瞬时点,改变时区,改变时间
ZonedDateTime sameInstant = zonedDateTime.withZoneSameInstant(ZoneId.of("America/New_York"));
System.out.println("Same Instant Zone: " + sameInstant);

get获取相关

// 获取当前时间的 ZonedDateTime 对象
ZonedDateTime zonedDateTime = ZonedDateTime.now();

// 获取当前日期在当年的第几天
int dayOfYear = zonedDateTime.getDayOfYear();
System.out.println("Day of Year: " + dayOfYear);

// 获取当前日期在当月的第几天
int dayOfMonth = zonedDateTime.getDayOfMonth();
System.out.println("Day of Month: " + dayOfMonth);

// 获取当前日期是星期几的枚举值
DayOfWeek dayOfWeek = zonedDateTime.getDayOfWeek();
System.out.println("Day of Week: " + dayOfWeek);

// 获取当前日期的月份枚举值
Month month = zonedDateTime.getMonth();
System.out.println("Month: " + month);

// 获取当前日期的月份值(1-12)
int monthValue = zonedDateTime.getMonthValue();
System.out.println("Month Value: " + monthValue);

// 获取当前日期的年份
int year = zonedDateTime.getYear();
System.out.println("Year: " + year);

// 获取当前时间的小时数(0-23)
int hour = zonedDateTime.getHour();
System.out.println("Hour: " + hour);

// 获取当前时间的分钟数(0-59)
int minute = zonedDateTime.getMinute();
System.out.println("Minute: " + minute);

// 获取当前时间的秒数(0-59)
int second = zonedDateTime.getSecond();
System.out.println("Second: " + second);

// 获取当前时间的纳秒数(0-999,999,999)
int nano = zonedDateTime.getNano();
System.out.println("Nano: " + nano);

// 获取当前时区的偏移量
ZoneOffset offset = zonedDateTime.getOffset();
System.out.println("Offset: " + offset);

// 转换为 LocalDate 对象,只包含日期部分
LocalDate localDate = zonedDateTime.toLocalDate();
System.out.println("Local Date: " + localDate);

// 转换为 LocalTime 对象,只包含时间部分
LocalTime localTime = zonedDateTime.toLocalTime();
System.out.println("Local Time: " + localTime);

// 转换为 LocalDateTime 对象,包含日期和时间部分,没有时区信息
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
System.out.println("Local DateTime: " + localDateTime);

// 转换为 Instant 对象,表示从1970-01-01T00:00:00Z起的瞬时点
Instant instant = zonedDateTime.toInstant();
System.out.println("Instant: " + instant)

转换日期相关

    ZonedDateTime now = ZonedDateTime.now();

    // 未来的日期时间
    ZonedDateTime futureDateTime = now.plusDays(1);
    boolean before = now.isBefore(futureDateTime);
    System.out.println("Is now before futureDateTime? " + before); // 输出 true

    // 输出 true,表示支持一天中的秒数
    boolean supportsSeconds = now.isSupported(ChronoField.SECOND_OF_DAY);
    System.out.println("Supports seconds of day? " + supportsSeconds);

    // 输出 false,表示不支持一年中的周数
    boolean supportsWeeks = now.isSupported(ChronoField.ALIGNED_WEEK_OF_YEAR);
    System.out.println("Supports weeks of year? " + supportsWeeks);

    // 过去的日期时间
    ZonedDateTime pastDateTime = now.minusHours(1);
    boolean after = now.isAfter(pastDateTime);
    System.out.println("Is now after pastDateTime? " + after); // 输出 true

    ZonedDateTime sameDateTime = ZonedDateTime.of(2024, 7, 30, 12, 0, 0, 0, ZoneId.systemDefault());
    boolean equal = now.isEqual(sameDateTime);
    System.out.println("Is now equal to sameDateTime? " + equal); // 输出 true,如果两个日期时间相等

LocalDateTime

当前时间

LocalDateTime now = LocalDateTime.now();

// 当前时间 2024-07-29T23:30:48.948003200
System.out.println(now);

时间解析

// 定义日期时间格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

// 待解析的日期时间字符串
String dateTimeString = "2024-07-30 15:30:00";

// 解析日期时间字符串为 LocalDate 对象
LocalDate parsedDate = LocalDate.parse(dateTimeString, formatter);

// 解析时间
LocalDateTime localDateTime = LocalDateTime.parse(dateTimeString, formatter);
System.out.println("有时间包含T:" + localDateTime);// 2024-07-30T15:30 会有 T 在里面
System.out.println("不包含T:" + localDateTime.format(formatter));

// 输出解析后的 LocalDate
System.out.println("Parsed LocalDate: " + parsedDate);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值