LocalDate、LocalTime、LocalDateTime 基本用法

本文详细介绍了Java8中LocalDate、LocalTime、LocalDateTime类的使用,包括日期和时间的创建、转换、格式化、时区处理以及如何判断时间是否在指定区间内。
摘要由CSDN通过智能技术生成

LocalDate

  • 表示日期,不包含时间和时区信息;

LocalDate(当前日期)

LocalDate today = LocalDate.now();
System.out.println("当前日期: " + today);

转换为 Date

LocalDate localDate = LocalDate.now();
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

System.out.println("LocalDate: " + localDate);
System.out.println("Date: " + date);

创建指定日期

LocalDate date1 = LocalDate.of(2023, 5, 5);
System.out.println("指定日期1: " + date1);

LocalDate date2 = LocalDate.parse("2023-05-05");
System.out.println("指定日期2: " + date2);

获取年月日星期

LocalDate today = LocalDate.now();

int year = today.getYear();
int month = today.getMonthValue();
int day = today.getDayOfMonth();
System.out.printf("今天是 %d 年 %d 月 %d 日\n", year, month, day);
// 获取星期几
DayOfWeek dayOfWeek = today.getDayOfWeek();
// 获取数字1-7
int weekDay = dayOfWeek.getValue();

获取月份天数

LocalDate now = LocalDate.now();
int daysInMonth = now.lengthOfMonth();
System.out.println("Days in month: " + daysInMonth);

增加或减少天数

LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);
LocalDate yesterday = today.minusDays(1);

System.out.println("明天的日期: " + tomorrow);
System.out.println("昨天的日期: " + yesterday);

LocalTime

  • 表示时间,不包含日期和时区信息;

Date 转换为 LocalTime

// 创建一个Date对象
Date date = new Date();
// 将Date对象转换为Instant对象
Instant instant = date.toInstant();
// 将Instant对象转换为LocalDateTime对象
LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();

// 从LocalDateTime对象中获取LocalTime部分
LocalTime localTime = localDateTime.toLocalTime();

转换为 Date

// 获取当前时间
LocalTime localTime = LocalTime.now();

// 获取当天日期
LocalDate localDate = LocalDate.now();

// 创建 LocalDateTime 对象,合并日期和时间信息
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);

// 获取时区偏移量
ZoneOffset zoneOffset = ZoneOffset.of("+8");

// 将 LocalDateTime 转换为 Instant(时间戳)
Instant instant = localDateTime.toInstant(zoneOffset);

// 将 Instant 转换为 Date
Date date = Date.from(instant);

注意,与 LocalDateTime 不同,LocalTime 只包含时间信息,不包含日期或时区信息。因此,在将 LocalTime 转换为 Date 之前,需要手动合并日期和时区信息。

创建 LocalTime

// 创建一个LocalTime对象,表示当前时间
LocalTime currentTime = LocalTime.now();
System.out.println("当前时间:" + currentTime);

// 创建一个指定时间的LocalTime对象
LocalTime specificTime = LocalTime.of(12, 30, 45);
System.out.println("指定时间:" + specificTime);

增加或减少时间

// 对当前时间进行操作,返回新的LocalTime对象
LocalTime plusHours = currentTime.plusHours(2);
LocalTime minusMinutes = currentTime.minusMinutes(15);

获取时分秒

// 获取LocalTime对象的小时、分钟和秒
int hour = currentTime.getHour();
int minute = currentTime.getMinute();
int second = currentTime.getSecond();
System.out.println("小时:" + hour + ",分钟:" + minute + ",秒:" + second);

LocalDateTime

  • 表示日期和时间,没有时区信息;

Date 转换为 LocalDateTime

Date date = new Date();
Instant instant = date.toInstant();
LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();

LocalDateTime 转换为 Date

LocalDateTime localDateTime = LocalDateTime.now();
// 获取系统默认时区的 ZoneId
ZoneId zoneId = ZoneId.systemDefault();
// 将 LocalDateTime 转换为 ZonedDateTime 对象
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
// 从 ZonedDateTime 中获取 Date 对象
Date date = Date.from(zonedDateTime.toInstant());

Java 8 中的 java.util.Date 类表示一个特定的瞬间(即时间戳),而不是一个本地日期或时间。因此,在将 LocalDateTime 转换为 Date 时,需要指定一个时区来获取相应的瞬间。

LocalDateTime(格式化日期时间字符串)

ZonedDateTime currentDateTime = ZonedDateTime.now();
// 格式化LocalDateTime对象为字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = currentDateTime.format(formatter);
System.out.println("格式化后的当前日期和时间:" + formattedDateTime);

ZonedDateTime(指定时区)

// 创建指定时区的ZonedDateTime对象
ZonedDateTime losAngelesTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println("中国标准时间(UTC+8): " + losAngelesTime);

ZonedDateTime(字符串转换时区)

ZonedDateTime dateTime = ZonedDateTime.parse("2023-05-05T10:15:30+01:00[Europe/Paris]");
System.out.println("巴黎时间: " + dateTime);

TemporalAdjusters(时间调节器)

// 创建一个LocalDate对象代表当前日期
LocalDate date = LocalDate.now();
// 使用TemporalAdjusters获取这个月的第一天
LocalDate firstDayOfMonth = date.with(TemporalAdjusters.firstDayOfMonth());
// 使用TemporalAdjusters获取这个月的最后一天
LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
// 使用TemporalAdjusters获取这个月的第一个星期三
LocalDate firstWednesdayOfMonth = date.with(TemporalAdjusters.firstInMonth(DayOfWeek.WEDNESDAY));
// 打印出结果
System.out.println("这个月的第一天: " + firstDayOfMonth);
System.out.println("这个月的最后一天: " + lastDayOfMonth);
System.out.println("这个月的第一个星期三: " + firstWednesdayOfMonth);

判断是否在时间区间内

  • 栗子:21:30:00 至 08:30:00 时间段内。
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Date;

public class Demo {

    public static void main(String[] args) {
        // 创建一个Date对象
        Date date = new Date();
        
        // 将Date对象转换为Instant对象
        Instant instant = date.toInstant();
        // 将Instant对象转换为LocalDateTime对象
        LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();

        // 从LocalDateTime对象中获取LocalTime部分
        LocalTime localTime = localDateTime.toLocalTime();
        System.out.println("localTime=" + localTime);

        // 时间段区间:21:30:00 至 08:30:00
        LocalTime startTime = LocalTime.of(21, 30, 0);
        LocalTime endTime = LocalTime.of(8, 30, 0);

        // 21:30:00 < localTime 或 21:30:00 = localTime 或 localTime < 08:30:00 或 localTime = 08:30:00
        if (startTime.isBefore(localTime) || startTime.equals(localTime) || localTime.isBefore(endTime) || localTime.equals(endTime)) {
            System.out.println("在时间段内");
        }
    }
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逢生博客

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值