LocalDate、LocalDateTime、LocalTime方法的基本使用

2022年11月7日12:57:27

前言

  • Java中1.8之前有date类和calendar类。其中date类到了1.8大部分的方法被弃用了说明这些方法都有很大的缺陷,而且date类如果不格式化可读性十分差,所以就需要格式化,而格式化使用simpledateformat来进行操作线程不安全。而calendar类是一个共享变量,而且没有做线程不安全,当多个线程同时使用simpledateformat调用format方法时,多个线程会同时调用calendar.setTime方法,而导致的后果时time值一直被修改从而返回的格式化的时间是错误的。而且simpledateformat方法中format和parse方法都是线程不安全的。
  • Java1.8之后出现了localdate,localdatetime,localtime这些类,而这些类使用了final来修饰,使得这些类是不可变的,一旦实例化,值就固定了,有点类似于String类,所以这些类都是线程安全的。
    localdate是针对于年月日的,localtime是针对于时分秒,localdatetime是针对于年月日时分秒。
  1. LocalDate是一个不可变的日期时间对象,表示日期,通常被视为年月日。
  2. LocalDate可具有不可预测的结果,应当避免。
  3. LocalDate用equals 方法进行比较。

Localdate创建方法

//获取当前日期 年月日(2022-05-31)LocalDate localDate=LocalDate.now();//输入年月日设置时间LocalDate localDate=LocalDate.of(year,month,day);

获取年月日星期几

//获取年份int year= localDate.getYear();int year= localDate.get(ChronoField.YEAR);//注意getMonth方法返回的是Month类,可通过getValue方法获得一个long类型的值,然后可以强转为int类型进行使用Month month= localDate.getMonth();//MAY 对象int month1= localDate.get(ChronoField.MONTH_OF_YEAR);//5int day= localDate.getDayOfMonth();//31int day1= localDate.get(ChronoField.DAY_OF_MONTH);//注意getDayOfWeek方法返回的是DayOfWeek类,可通过getValue方法获得一个long类型的值,然后可以强转为int类型进行使用DayOfWeek dayOfWeek= localDate.getDayOfWeek();//TUESDAYint dayOfWeek1= localDate.get(ChronoField.DAY_OF_WEEK);//2

进行加减日期

LocalDate localDate=LocalDate.now();//增加一年
localDate= localDate.plusYears(1);
localDate= localDate.plus(1,ChronoUnit.YEARS);//减少一个月
localDate= localDate.minusMonths(1);
localDate= localDate.minus(1,ChronoUnit.MONTHS);//减少一日
localDate= localDate.minusDays(1);
localDate= localDate.minus(1,ChronoUnit.DAYS);//通过使用with方法进行修改//修改年为2020
localDate= localDate.withYear(2020);//修改为2020
localDate= localDate.with(ChronoField.YEAR,2020);

LocalTime相类似就是把年月日换成时分秒就可以了
创建LocalDateTime可以使用LocalDateTime.of(locaDate,localTime),LocalDate.atTime(localTime),LocalTime.atDate(localDate)来进行创建
LocalDateTime获取LocalDate和LocalTime的方法如下

//获取LocalDateLocalDate localDate= localDateTime.toLocalDate();//获取LocalTimeLocalTime localTime= localDateTime.toLocalTime();

Instant

Instant类是1.8之后新增的,与1.8之前的Date类有点相似

Instant的创建方法

Instant instant=Instant.now();//l为1970年1月1日至所记录时间的的毫秒数Instant instant1=Instant.ofEpochMilli(l);

设置时区偏移量

// 按时区设置偏移量OffsetDateTime offsetDateTime= instant.atOffset(ZoneOffset.ofHours(8));// 设置偏移量为8

获取秒数

long currentSecond= instant.getEpochSecond();

获取毫秒数

获取1970年1月1日至所记录时间的的毫秒数,类似于Date类中的getTime方法。

//获取毫秒数long l= instant.toEpochMilli();

LocalDate,LocalTime,LocalDateTime,Instant类进行格式化

对于LocalDate,LocalTime,LocalDateTime,Instant类进行格式化需要使用DateTimeFormatter类

//String转换成日期类型//String类型转换成LocalDate类型LocalDate localDate=LocalDate.parse("2019-12-07");//String类型转换为LocalTime类型LocalTime localTime=LocalTime.parse("17:26:00");//String类型转换为LocalDateTime类型//按照12小时计算DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");//按照24小时计算DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDate localDate=LocalDate.parse("2019-12-07 07:43:53",formatter);//日期类型转换成String类型//localDate转换成StringLocalDate localDate=LocalDate.now();//按照yyyyMMdd样式进行更改String format= localDate.format(DateTimeFormatter.BASIC_ISO_DATE);//按照yyyy-MM-dd样式进行更改String format= localDate.format(DateTimeFormatter.ISO_DATE);//自定义样式进行更改DateTimeFormatter pattern=DateTimeFormatter.ofPattern("yyyy年MM月dd日");String format= localDate.format(pattern);//LocalTime类型转换为String类型//按照xx:xx:xx.xx样式进行转换LocalTime localTime=LocalTime.now();String format3= localTime.format(DateTimeFormatter.ISO_TIME);//按照自定义样式进行转换DateTimeFormatter formatter=DateTimeFormatter.ofPattern("hh:mm:ss");String format4= localTime.format(formatter);//LocalDateTime类型转换为String类型LocalDateTime localDateTime=LocalDateTime.now();DateTimeFormatter formatter2=DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");String format5= localDateTime.format(formatter2);

LocalDate基本方法总结

方法 返回类型 介绍说明
getYear() int 该日期的年份
getMonth() Month 该日期月份的对象
getMonthValue() int 该日期的月份
查询、直接修改年份日期等 ——-—— ——————
getDayOfWeek().getValue() int 该日期是当前周的第几天
getDayOfMonth() int 该日期是当前月的第几天
getDayOfYear() int 该日期是当前年的第几天
withYear(int year) LocalDate 修改该日期的年份
withMonth(int month) LocalDate 修改该日期的月份
withDayOfMonth(int dayOfMonth) LocalDate 修改该日期在当月的天数
判断、比较 ———— ——————
isLeapYear() boolean 判断是否是闰年
lengthOfYear() int 获取该年份是365还是366天
lengthOfMonth() int 当前月份有多少天
compareTo(ChronoLocalDate other) int 比较该日期与other日期的大小,返回正数,那么当前对象时间较晚(数字较大)
isBefore(ChronoLocalDate other) boolean 比较该日期是否比other日期早(true为早)
isAfter(ChronoLocalDate other) boolean 比较该日期是否比other日期晚(true为晚)
isEqual(ChronoLocalDate other) boolean 比较两个日期是否相等
在原有基础上增加年份等 ———— ——————
plusYears(long yearsToAdd) LocalDate 当前日期增加指定的年数
plusMonths(long monthsToAdd) LocalDate 当前日期增加指定的月份
plusWeeks(long weeksToAdd) LocalDate 当前日期增加指定的周数
plusDays(long daysToAdd) LocalDate 当前日期增加指定的天数
在原有基础上减少年份等 ———— ——————
minusYears(long yearsToSubtract) LocalDate 当前日期减少指定的年数
minusMonths(long monthsToSubtract) LocalDate 当前日期减少指定的月份
minusWeeks(long weeksToSubtract) LocalDate 当前日期减少指定的周数
minusDays(long daysToSubtract) LocalDate 当前日期减少指定的天数

LocalDate 与 String 之间的转换

LocalDate today=LocalDate.now();DateTimeFormatter fmt=DateTimeFormatter.ofPattern("yyyy-MM-dd");String dateStr= today.format(fmt);
String str="2019-03-03";//指定转换格式DateTimeFormatter fmt=DateTimeFormatter.ofPattern("yyyy-MM-dd");//进行转换LocalDate date=LocalDate.parse(str, fmt);
  • 作者:加贝力口贝
  • 原文链接:https://blog.csdn.net/qq_43102730/article/details/125060192
    更新时间:2022年11月7日12:57:27 ,共 5173 字。