详细分析Java中的LocalDateTime类

CSDN 2024-07-19 14:05:02 阅读 78

目录

前言1. 基本知识2. 常用方法3. 当前时间戳4. 格式转换

前言

一开始使用Date类来表述时间属性

一个问题是 时间戳的问题,另一个问题是读取Excel数据格式的时候没有那么灵活

1. 基本知识

<code>LocalDateTime是Java 8引入的日期和时间API中的一个类,位于java.time包中。

它提供了一种更灵活、更方便的方式来处理日期和时间,相比旧的Date类更为强大且易用。

以下是关于LocalDateTime的详细分析:

概念LocalDateTime表示不带时区的日期和时间。

包含了年、月、日、时、分、秒等信息,可以精确到纳秒级别。

Date类不同,LocalDateTime不受时区的影响,更适合处理应用程序中不涉及时区转换的日期和时间。

作用: LocalDateTime用于表示和处理不带时区信息的日期和时间,适用于大多数应用场景,特别是与用户直接交互或与本地系统相关的情况。


LocalDateTime类的关键特征:

LocalDateTime是java.time包中的一个不可变类(immutable class)。内部实现使用了LocalDate和LocalTime。不包含时区信息,是一个本地日期和时间的组合。

最主要的特性如下:

不可变性(Immutability): LocalDateTime是不可变的,这意味着一旦创建了对象,就无法更改其内容。任何对日期和时间的修改都会返回一个新的LocalDateTime对象。

线程安全性: 由于不可变性,LocalDateTime是线程安全的。多个线程可以同时访问对象而无需担心并发问题。

工厂方法: 除了使用of方法创建LocalDateTime对象外,还有一些静态工厂方法,如now、ofInstant、ofEpochSecond等,用于根据不同的情况创建实例。

日期时间调整: LocalDateTime提供了plus、minus等方法,用于执行日期和时间的调整操作。这些方法返回新的对象,而不是修改原始对象。

格式化和解析: LocalDateTime支持DateTimeFormatter用于格式化和解析日期时间。你可以创建自定义的格式化模式。

2. 常用方法

获取当前日期时间:

LocalDateTime currentDateTime = LocalDateTime.now();

创建指定日期时间:

LocalDateTime specificDateTime = LocalDateTime.of(2022, Month.JANUARY, 1, 12, 30);

获取日期和时间部分:

LocalDate datePart = specificDateTime.toLocalDate();

LocalTime timePart = specificDateTime.toLocalTime();

日期时间加减操作:

LocalDateTime newDateTime = specificDateTime.plusDays(1).minusHours(3);

比较:

boolean isAfter = specificDateTime.isAfter(currentDateTime);

格式化和解析:

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

String formattedDateTime = specificDateTime.format(formatter);

LocalDateTime parsedDateTime = LocalDateTime.parse("2022-01-01 12:30:00", formatter);

类似的Demo如下:

import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;

public class LocalDateTimeExample {

public static void main(String[] args) {

// 获取当前日期时间

LocalDateTime currentDateTime = LocalDateTime.now();

System.out.println("Current DateTime: " + currentDateTime);

// 创建指定日期时间

LocalDateTime specificDateTime = LocalDateTime.of(2022, 1, 1, 12, 30);

System.out.println("Specific DateTime: " + specificDateTime);

// 比较

boolean isAfter = specificDateTime.isAfter(currentDateTime);

System.out.println("Is specificDateTime after currentDateTime? " + isAfter);

// 格式化和解析

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

String formattedDateTime = specificDateTime.format(formatter);

System.out.println("Formatted DateTime: " + formattedDateTime);

LocalDateTime parsedDateTime = LocalDateTime.parse("2022-01-01 12:30:00", formatter);

System.out.println("Parsed DateTime: " + parsedDateTime);

}

}

截图如下:

在这里插入图片描述


对于上述的API为获取整体,如果获取细节也是可以的!

获取年份:(返回LocalDateTime对象的年份部分)

<code>int year = localDateTime.getYear();

获取月份:(返回LocalDateTime对象的月份部分)

Month month = localDateTime.getMonth(); //getMonth()返回Month枚举类型

int monthValue = localDateTime.getMonthValue(); //getMonthValue()返回月份的整数值

获取天(日):

int dayOfMonth = localDateTime.getDayOfMonth(); //返回月份中的天数。

int dayOfYear = localDateTime.getDayOfYear(); //返回年份中的天数。

DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();//返回星期几,返回的是DayOfWeek枚举类型。

获取小时、分钟、秒:(返回LocalDateTime对象的时、分、秒部分)

int hour = localDateTime.getHour();

int minute = localDateTime.getMinute();

int second = localDateTime.getSecond();

其他时间信息:(返回纳秒部分)

int nano = localDateTime.getNano();

示例的Demo如下:

import java.time.*;

public class LocalDateTimeExample {

public static void main(String[] args) {

LocalDateTime localDateTime = LocalDateTime.now();

// 获取年份

int year = localDateTime.getYear();

System.out.println("Year: " + year);

// 获取月份

Month month = localDateTime.getMonth();

int monthValue = localDateTime.getMonthValue();

System.out.println("Month: " + month + " (" + monthValue + ")");

// 获取天(日)

int dayOfMonth = localDateTime.getDayOfMonth();

int dayOfYear = localDateTime.getDayOfYear();

DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();

System.out.println("Day of Month: " + dayOfMonth);

System.out.println("Day of Year: " + dayOfYear);

System.out.println("Day of Week: " + dayOfWeek);

// 获取小时、分钟、秒

int hour = localDateTime.getHour();

int minute = localDateTime.getMinute();

int second = localDateTime.getSecond();

System.out.println("Hour: " + hour);

System.out.println("Minute: " + minute);

System.out.println("Second: " + second);

// 获取其他时间信息

int nano = localDateTime.getNano();

System.out.println("Nano: " + nano);

}

}

截图如下:

在这里插入图片描述

3. 当前时间戳

<code>import java.text.SimpleDateFormat;

import java.time.Clock;

import java.time.Instant;

import java.time.LocalDateTime;

import java.time.ZoneOffset;

import java.time.format.DateTimeFormatter;

public class LocalDateTimeExample {

public static void main(String[] args) {

// 获取当前 LocalDateTime 对象

LocalDateTime currentDateTime = LocalDateTime.now();

// 将 LocalDateTime 转换为 Instant

Instant instant = currentDateTime.toInstant(ZoneOffset.of("+8"));

// 获取时间戳

long timestamp = instant.toEpochMilli();

System.out.println("Current Timestamp with LocalDateTime: " + timestamp);

//时间戳格式转换

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.println(df.format(timestamp));

}

}

或者另外一种表达方式:

// 获取当前 LocalDateTime 对象

LocalDateTime currentDateTime = LocalDateTime.now(Clock.systemUTC());

// 将 LocalDateTime 转换为 Instant

Instant instant = currentDateTime.toInstant(ZoneOffset.UTC);

最终截图如下:

在这里插入图片描述

4. 格式转换

常用的格式转换为String与LocalDateTime之间!

常用的方法有个格式转换的概括,但此处重点拿出来讲一讲:

一、String 转换为 LocalDateTime:

<code>public class LocalDateTimeExample {

public static void main(String[] args) {

// String 转换为 LocalDateTime

String dateStr = "2024-01-21 21:00:00";

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

LocalDateTime parsedDate = LocalDateTime.parse(dateStr, formatter);

System.out.println(parsedDate);

// String 转换为 LocalDate

String dateStr2 = "2024-01-21 21:00:00";

DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

LocalDate parsedDate2 = LocalDate.parse(dateStr2, formatter2);

System.out.println(parsedDate2);

}

}

截图如下:

在这里插入图片描述

二、

<code>public class LocalDateTimeExample {

public static void main(String[] args) {

LocalDateTime date = LocalDateTime.now();

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

String formatedDateStr = date.format(formatter);

System.out.println("-------" + formatedDateStr);

}

}

截图如下:

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。