Java中LocalDate、LocalTime、LocalDateTime时间类介绍

目录


        一、三者的介绍

        这三个类均在“java.time”包下,依次导包写法“import java.time.LocalDate;import java.time.LocalTime;import java.time.LocalDateTime;”。如果三个包均要使用的话可以用import java.time.*;代替以上三个进行导包。

        三者的不同点是LocalDate只能使用年月日;LocalTime只能使用时分秒;LocalDateTime可以使用年月日时分秒。我们在使用的时候可以根据自己的需求进行选择。

        二、实例化

1、普通实例化

        三者在进行实列化的时候都不是通过new的方法进行实例化,而是通过now()方法来获取当前时间的对象。例如:

//分别进行实例化
LocalDate ld = LocalDate.now();
LocalTime lt = LocalTime.now();
LocalDateTime ldt = LocalDateTime.now();

//依次格式化输出
System.out.printf("%tF%n",ld);
System.out.printf("%tT%n",lt);
System.out.printf("%tF %<tT%n",ldt);

运行结果:

 2、实例化并设置日期: 

        我们可以使用of()方法来进行声名我们想要的事件对象;在指定时间的时候不用像Date日期类一样年份需要减去1900,也不用像Calendar日期类一样月份需要减去1。因为新的日期类已经很完善了在使用的时候不需要我们去进行计算,直接使用即可。

//分别进行实例化
LocalDate ld = LocalDate.of(2020,4,5);
LocalTime lt = LocalTime.of(14,59,59);
LocalDateTime ldt = LocalDateTime.of(2020,4,5,14,59,59);

//依次格式化输出
System.out.printf("%tF%n",ld);
System.out.printf("%tT%n",lt);
System.out.printf("%tF %<tT%n",ldt);

运行结果:

3、利用格式化工具实例化并将日期字符串设置为日期

        在实际使用的时候我们接收到的日期的参数往往是输入的字符串,而默认的字符串实例化格式只有一种那就是按照“2020-02-05T14:59:59”格式进行传入。值得注意的时我举得例子为LocDateTime类传入参数的,在年月日时分秒中年必须是四位、其余必须是两位不然不能正确解析,在年月日和时分秒之间必须用“T”来进行分隔开不然也会造成解析错误。在LocalDate和LocalTime使用时只需传入所需部分即可。

//按特定格式传入字符串进行时间设置并实例化
LocalDate ld = LocalDate.parse("2020-02-05");
LocalTime lt = LocalTime.parse("14:59:59");
LocalDateTime ldt = LocalDateTime.parse("2020-02-05T14:59:59");

//依次格式化输出
System.out.printf("%tF%n",ld);
System.out.printf("%tT%n",lt);
System.out.printf("%tF %<tT%n",ldt);

运行结果:

        如果接收到的格式是其他方式那么我们就要利用日期格式化工具DateTimeFormatter将字符串时间实例化,当然我们在实例化对象的时候要严格按照实例化的格式进行日期字符串的传入。下面就是我利用格式化工具规定的一种传入日期字符串的格式,小伙伴们还可以试试其他格式。

//分别设置三个格式化工具
DateTimeFormatter ymd = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
DateTimeFormatter hms = DateTimeFormatter.ofPattern("HH时mm分ss秒");
DateTimeFormatter ymdhms = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");

//分别进行实例化
LocalDate ld = LocalDate.parse("2000年04月05日",ymd);
LocalTime lt = LocalTime.parse("15时59分59秒",hms);
LocalDateTime ldt = LocalDateTime.parse("2000年04月05日 15时59分59秒",ymdhms);

//依次格式化输出
System.out.printf("%tF%n",ld);
System.out.printf("%tT%n",lt);
System.out.printf("%tF %<tT%n",ldt);

  运行结果:

        三、常用方法介绍

1、获取星期几

        因为在日其中就含有天数可以算出星期几,所以就利用LocalDate进行演示:

//获取当前日期
LocalDate ld = LocalDate.now();
//得到DayOfWeek对象
DayOfWeek dayOfWeek = ld.getDayOfWeek();
//输出当前星期几的值
System.out.println(dayOfWeek.getValue());
//第一个参数为长格式,第二个参数为设置输出的地区语言
System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA));
//短格式输出
System.out.println(dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.CHINA));

运行结果:

 

2、获取月份

        同样的利用LocalDate演示:

//获取当前日期
LocalDate ld = LocalDate.now();
//得到Month对象
Month month = ld.getMonth();
//返回当前月份的值
System.out.println(month.getValue());
//第一个参数为长格式,第二个参数为设置输出的地区语言
System.out.println(month.getDisplayName(TextStyle.FULL, Locale.CHINA));
//短格式输出
System.out.println(month.getDisplayName(TextStyle.SHORT, Locale.CHINA));

运行结果:

        新版的日期类是很强大的,获取单个值的方法不止1和2展示的两种,还有很多相似的方法就不在这里一一展示了。

3、对年月日时分秒进行加减

        此方法三个类均可使用,但值得注意的是在使用的时候要明确哪些类包含是什么例如LocalDate类中只有年月日,则不能进行时分秒的加减操作。加的方法为plus(long amountToAdd, TemporalUnit unit),减的方法为minus(long amountToAdd, TemporalUnit unit),其中都有两个参数第一个参数为要减的数值,第二个参数为要减的类型。下面我用LocalDateTime类演示plus(long amountToAdd, TemporalUnit unit)方法(minus(long amountToAdd, TemporalUnit unit)与其使用方式相同,当然也可以使plus(long amountToAdd, TemporalUnit unit)方法加的为负值实现减操作)。

//获取当前日期时间
LocalDateTime now = LocalDateTime.now();
//格式化输出
System.out.printf("当前时间:%tF %<tT%n",now);
//加五年
now = now.plus(5, ChronoUnit.YEARS);
System.out.printf("加五年后的时间:%tF %<tT%n",now);
//加两年
now = now.plus(2, ChronoUnit.MONTHS);
System.out.printf("又加两小时的时间:%tF %<tT%n",now);
//加十天
now = now.plus(10, ChronoUnit.DAYS);
System.out.printf("又加十天的时间:%tF %<tT%n",now);
//加六小时
now = now.plus(6, ChronoUnit.HOURS);
System.out.printf("又加6小时的时间:%tF %<tT%n",now);
//加三十分钟
now = now.plus(30, ChronoUnit.MINUTES);
System.out.printf("又加30分钟的时间:%tF %<tT%n",now);
//加20秒
now = now.plus(20, ChronoUnit.SECONDS);
System.out.printf("又加20秒的时间:%tF %<tT%n",now);

运行结果:

4、计算两个日期之间的天数

        ChronoUnit.DAYS.between(d2,d1),如果我们想计算其它值如两个日期之间相差的年份、相差的月等,我们只需将“DAYS”换为相对应的即可实现。下面是对两个日期之间天数的展示。

LocalDate d1 = LocalDate.of(2023, 6, 12);
LocalDate d2 = LocalDate.of(2000, 4, 1);
//得到d1和d2之间的天数
long days = ChronoUnit.DAYS.between(d2,d1);
//格式化输出
System.out.printf("%s到%s之间有%d天",d2,d1,days);

运行结果:

5、获取时间戳

        因为LocalDate和localTime中的日期是不完整的,所以我们在计算时间戳的时候只能计算LocalDateTime的时间戳。

LocalDateTime now = LocalDateTime.now();
//获取时间戳
long l = now.toInstant(ZoneOffset.of("+08:00")).toEpochMilli();
System.out.println(l);

 运行结果:

6、判断是否为闰年

        在LocalDate中isLeapYear()方法可以直接用判断该年份是否为闰年,当然该方法LocalDateTime也是可以使用的。

//设置时间
LocalDate ld = LocalDate.of(2020,5,24);
//判断是否湿闰年
System.out.println(ld.isLeapYear());

 运行结果:

  

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月8日
下一篇 2023年12月8日

相关推荐