Skip to content

LocalDateTime类是 Java 8 中引入的日期和时间 API 的一部分。它表示一个不可变的日期-时间对象,没有时区信息。

创建一个LocalDateTime对象

可以使用静态方法now()来获取当前的日期和时间:

LocalDateTime currentDateTime = LocalDateTime.now();

也可以使用指定的年、月、日、小时、分钟和秒来创建一个LocalDateTime对象:

LocalDateTime specificDateTime = LocalDateTime.of(2023, 9, 23, 20, 43, 55);

访问LocalDateTime对象

可以使用以下方法来获取LocalDateTime对象的年、月、日、小时、分钟和秒等部分的值:

int year = dateTime.getYear();
Month month = dateTime.getMonth();
int dayOfMonth = dateTime.getDayOfMonth();
int hour = dateTime.getHour();
int minute = dateTime.getMinute();
int second = dateTime.getSecond();

修改LocalDateTime对象的值

由于LocalDateTime是不可变的,所以我们不能直接修改其值。但是可以使用返回新实例的方法来创建一个修改后的副本:

LocalDateTime modifiedDateTime = dateTime.withYear(2024); // 修改年份为2024

进行日期和时间计算

LocalDateTime提供了一系列用于日期和时间计算的方法。例如,可以使用plusDays()方法增加指定的天数,使用minusHours()方法减去指定的小时数:

LocalDateTime newDateTime = dateTime.plusDays(5); // 增加5天
LocalDateTime subtractedDateTime = dateTime.minusHours(3); // 减去3小时

格式化LocalDateTime对象为字符串

可以使用DateTimeFormatter类来定义日期和时间的格式,并使用format()方法将LocalDateTime对象转换为字符串:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter);

这些只是LocalDateTime类的一些基本用法。它还有许多其他方法可用于处理日期和时间操作。

DateTimeFormatter 类

DateTimeFormatter 是 Java 中用于格式化和解析日期时间对象的类。它可以将LocalDateTime或其他日期时间类型转换为特定的字符串格式,也可以将字符串解析为对应的日期时间对象。以下是一些常见的DateTimeFormatter的使用示例:

格式化日期时间对象

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        LocalDateTime dateTime = LocalDateTime.now();
        
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDateTime = dateTime.format(formatter);
        
        System.out.println(formattedDateTime); // 输出:2023-09-23 20:44:26
    }
}

解析字符串为日期时间对象

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        String dateTimeString = "2023-09-23 20:44:26";
        
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);
        
        System.out.println(parsedDateTime); // 输出:2023-09-23T20:44:26
    }
}

在上述示例中,我们首先创建了一个DateTimeFormatter对象,通过调用ofPattern()方法并传入指定的日期时间格式模式来定义格式。然后,我们使用format()方法将LocalDateTime对象格式化为字符串,并使用parse()方法将字符串解析为LocalDateTime对象。

你可以根据自己的需求自定义不同的日期时间格式模式,例如:yyyy-MM-dd"表示年-月-日,"HH:mm:ss表示小时:分钟:秒等。

Duration和Period

Duration和Period是Java中用于处理时间间隔的两个类。 Duration类表示一段持续的时间,可以精确到纳秒级别。它适用于测量较短的时间间隔,例如几毫秒、几秒或几分钟。你可以使用Duration类执行各种操作,如添加、减去、乘以或除以其他Duration对象,以及与日期时间对象进行加减运算。

下面是一个示例,展示了如何创建和操作Duration对象:

import java.time.Duration;

public class DurationExample {
    public static void main(String[] args) {
        // 创建一个持续时间为3秒的Duration对象
        Duration duration = Duration.ofSeconds(3);

        System.out.println("Duration: " + duration);  // 输出:Duration: PT3S

        // 增加2秒
        duration = duration.plusSeconds(2);
        System.out.println("Updated Duration: " + duration);  // 输出:Updated Duration: PT5S

        // 减去1秒
        duration = duration.minusSeconds(1);
        System.out.println("Updated Duration: " + duration);  // 输出:Updated Duration: PT4S

        // 将持续时间转换为毫秒
        long millis = duration.toMillis();
        System.out.println("Duration in milliseconds: " + millis);  // 输出:Duration in milliseconds: 4000
    }
}

Period类表示一段持续的日期间隔,例如几天、几个月或几年。它适用于处理较长的日期间隔,例如计算两个日期之间的天数差异。你可以使用Period类执行各种操作,如添加、减去或与其他Period对象进行比较。下面是一个示例,展示了如何创建和操作Period对象:

import java.time.LocalDate;
import java.time.Period;

public class PeriodExample {
    public static void main(String[] args) {
        // 创建一个持续时间为3年2个月1天的Period对象
        Period period = Period.ofYears(3).plusMonths(2).plusDays(1);

        System.out.println("Period: " + period);  // 输出:Period: P3Y2M1D

        // 增加1个月
        period = period.plusMonths(1);
        System.out.println("Updated Period: " + period);  // 输出:Updated Period: P3Y3M1D

        // 减去1天
        period = period.minusDays(1);
        System.out.println("Updated Period: " + period);  // 输出:Updated Period: P3Y3M0D

        // 将期间应用于日期
        LocalDate date = LocalDate.now();
        LocalDate updatedDate = date.plus(period);
        System.out.println("Updated Date: " + updatedDate);  // 输出:Updated Date: 2026-09-24
    }
}