文章目录
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("在时间段内");
}
}
}