JavaSE -- 时间类的详细介绍(Date,LocalDate)

Date类

构造方法

new Date():当前系统日期和时间。

new Date(long):给定的日期时间

常用方法

  • after(Date):判断当前日期对象是否在给定日期之后
  • before(Date):判断当前日期对象是否在给定日期之前
  • equals(Object):判断两日期是否相等
  • compareTo(Date):比较两日期前后顺序,如果当前日期对象大于给定日期对象返回 1,小于返回 -1,等于返回 0。

DateFormat类

对日期类进行格式化和解析,由于该类是个抽象类,所以实例化方式有两种。

  • 通过静态方法的调用来获取自己的子类,处理的是长日期和长时间类型(就是以年月日修饰的日期格式:2024年9月12日),有一下创建方式
    • getDateInstance()
    • getTimeInstance()
    • getDateTimeInstance()
  • 通过创建 SimpleDateFormat 子类对象,处理的是短日期和时间类型(2024/9/12),可以自定义日期格式。如
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss a E");
String s1 = simpleDateFormat.format(date);
// 2025:06:05 10:53:19 上午 周四
字母 日期/时间
y
M 月份
d 日期中的天数
E 星期中的天数
H 小时数(24小时)
h 小时数(12小时)
m 分钟数
s 秒数
a 上午/下午标记
S 毫秒数

常用方法

  • format(date):将 Date 类型格式化(可以自定义格式化模式)成字符串。
  • parse(str):将字符串解析成 Date 数据类型(要指定解析的格式,不然会报解析错误)

Calendar类

该类是一个抽象类,要通过静态方法 Calendar.getInstance() 来获取子类对象

  1. 与 Date 类的相互转换
Calendar calendar = Calendar.getInstance();
Date time = calendar.getTime();
calendar.setTime(time);
  1. 获取其中的具体信息(年份,月份…)
System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); // 24小时
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
System.out.println(calendar.get(Calendar.MONTH) + 1); //在这个类当中 0 表示 1 月 
System.out.println(calendar.get(Calendar.DATE));
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.HOUR)); // 12小时
  1. 可以自己设置时间
Calendar calendar = Calendar.getInstance();
calendar.set(2000, 12, 6);

GregorianCalendar类

格里高利历是公历的标准时间,四年一润,百年不润,四百年一大润

可以用来判断是否是润年

GregorianCalendar gregorianCalendar = new GregorianCalendar();
boolean leapYear = gregorianCalendar.isLeapYear(2024);

JDK8新增的日期工具类

LocalDateTime

常见类

LocalDate:获取本地日期

LocalTime:获取本地时间

LocalDateTime:获取本地日期和时间

初始化

LocalDate localDate = LocalDate.now(); // 获取现在本地的日期 2025-06-05
LocalTime localTime = LocalTime.now(); // 获取现在本地的时间 12:34:50.503098700
// 获取本地而日期时间 2025-06-05T12:35:47.468086200
LocalDateTime localDateTime = LocalDateTime.now(); 
//指定时间日期 2022-09-02T19:30:12
LocalDateTime localDateTime1 = LocalDateTime.of(2022, 9, 2, 19, 3012);

获取具体年月日

int year = localDateTime.getYear();
int month = localDateTime.getMonthValue();
int day = localDateTime.getDayOfMonth();
int dayOfWeek = localDateTime.getDayOfWeek().getValue(); 
int hour = localDateTime.getHour();

修改日期

LocalDateTime localDateTime = LocalDateTime.now();
//创建一个 localDateTime 副本,并进行修改
LocalDateTime localDateTime2 = localDateTime.withYear(1001);
localDateTime2 = localDateTime.withDayOfMonth(20);

日期偏移(实现几天后,几天前)

LocalDateTime localDateTime = LocalDateTime.now();
//在原用日期的基础上加3天
LocalDateTime localDateTime2 = localDateTime.plusDays(10);
LocalDateTime localDateTime3 = localDateTime.minusDays(10);
LocalDateTime localDateTime4 = localDateTime.plusMonths(1);
Instant

获取日期变更子午线的时间点,可以更改时区,实现时间偏移。

//初始为本初子午线的时间
Instant instant = Instant.now();
// 转为毫秒数(时间戳)
long Milli = instant.toEpochMilli();
//获取最大时区时间
Instant max = instant.MAX;

//获取东八区的时间(是个偏移时间对象)
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.of("+8"));
//偏移时间对象转为 LocalDateTime
LocalDate localDate = offsetDateTime.toLocalDate();
//时间戳转为 Instant
Instant instant1 = Instant.ofEpochMilli(System.currentTimeMillis());
DateTimeFormatter

指定转换格式,实现 LocalDateTime字符串之间的相互转换

  • LocalDateTime 按规定格式转为字符串
//将 LocalDateTime 按规定格式转为字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
LocalDateTime now = LocalDateTime.now();
String dateTime = formatter.format(now);
  • 字符串解析成 LocalDateTime
//将字符串解析成 LocalDateTime
formatter =  DateTimeFormatter.ofPattern("yyyy:MM:dd HH:mm:ss");
String time = "2021:07:09 12:00:00";
LocalDateTime Time = LocalDateTime.parse(time, formatter);
  • 时间戳转为 LocalDateTime
//将时间戳转为 LocalDateTime
long milli = Instant.now().toEpochMilli();
LocalDateTime localDateTime = LocalDateTime
        .ofInstant(Instant.ofEpochMilli(milli), ZoneId.systemDefault());
String time = formatter.format(localDateTime);
获取两段时间的差

计算两段日期的间隔

//通过 Period 来实现,可以获得两段时间的相差的年月日(但是不能将这个转换为天数)
LocalDate localDate1 = LocalDate.of(2020, 10, 12);
LocalDate localDate2 = LocalDate.of(2020, 9, 12);
Period period = Period.between(localDate1, localDate2);
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());

// ChronoUnit 可以获得具体的天数/月份...
long days = ChronoUnit.DAYS.between(localDate1, localDate2);
long months = ChronoUnit.MONTHS.between(localDate1, localDate2);

//手动算,转成纪元的天数再相减
long days2 = localDate1.toEpochDay() - localDate2.toEpochDay();

计算两段日期时间的间隔

LocalDateTime localDateTime1 = LocalDateTime.of(2020, 9, 12, 10, 10, 10);
LocalDateTime localDateTime2 = LocalDateTime.of(2020, 9, 11, 10, 10, 10);

//通过 Duration
Duration duration = Duration.between(localDateTime1, localDateTime2);
long days1 = duration.toDays();
long hours = duration.toHours();

//通过LocalDateTime自带的方法 until
long until = localDateTime1.until(localDateTime2, ChronoUnit.DAYS);
long hours1 = localDateTime1.until(localDateTime2, ChronoUnit.HOURS);

//通过 ChronoUnit
long days = ChronoUnit.DAYS.between(localDateTime1, localDateTime2);
long months = ChronoUnit.MONTHS.between(localDateTime1, localDateTime2);
时间调节器

用来修改日期时间

LocalDate date  =LocalDate.now();
//根据 date 获取下周五时间
LocalDate date1 = date.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
//获取本月的第一天
date1 = date.with(TemporalAdjusters.firstDayOfMonth());
//获取本月的最后一天
date1 = date.with(TemporalAdjusters.lastDayOfMonth());

你可能感兴趣的:(Java学习笔记,java,开发语言)