详解Java中Period类的使用方法

网友投稿 327 2022-07-28


目录简介Duration和Period创建方法通过时间单位创建通过LocalDate创建解析方法比较方法增减方法转换单位取值方法

简介

本文用示例介绍java的Period的用法。

Duration和Period

说明

Duration类通过秒和纳秒相结合来描述一个时间量,最高精度是纳秒。时间量可以为正也可以为负,比如1天(86400秒0纳秒)、-1天(-86400秒0纳秒)、1年(31556952秒0纳秒)、1毫秒(0秒1000000纳秒)等。

Period类通过年、月、日相结合来描述一个时间量,最高精度是天。时间量可以为正也可以为负,例如2年(2年0个月0天)、3个月(0年3个月0天)、4天(0年0月4天)等。

这两个类是不可变的、线程安全的、最终类。都是JDK8新增的。

Duration用法

见:详解Java中Duration类的使用方法

创建方法

通过时间单位创建

如果仅一个值表示,如使用ofDays()方法,那么其他值为0。

若仅用ofWeeks,则其天数为week数乘以7.

Period fromUnits = Period.of(3, 10, 10);

Period fromDays = Period.ofDays(50);

Period fromMonths = Period.ofMonths(5);

Period fromYears = Period.ofYears(10);

Period fromWeeks = Period.ofWeeks(40); //280天

通过LocalDate创建

LocalDate startDate = LocalDate.of(2015, 2, 20);

LocalDate endDate = LocalDate.of(2017, 1, 15);

// startDate减endDate

Period period = Period.between(startDate, endDate);

解析方法

格式1:“PnYnMnWnD”

P:开始符,表示period(即:表示年月日);

Y:year;

M:month;

W:week;

D:day

P, Y, M, W, D都可以用大写或者小写。

Period period = Period.parse("P2Y"); //2年

Period period = Period.parse("P2Y3M5D"); //2年3月5天

Period period = Period.parse("P1Y2M3W4D"); // 1年2月3周4天。即:1年2月25天

源码

public final class Period

implements ChronoPeriod, Serializable {

//-----------------------------------------------------------------------

/**

* Obtains a {@code Period} http://from a text string such as {@code PnYnMnD}.

*

* This will parse the string produced by {@code toString()} which is

* based on the ISO-8601 period formats {@code PnYnMnD} and {@code PnW}.

*

* The string starts with an optional sign, denoted by the ASCII negative

* or positive symbol. If negative, the whole period is negated.

* The ASCII letter "P" is next in upper or lower case.

* There are then four sections, each consisting of a number and a suffix.

* At least one of the four sections must be present.

* The sections have suffixes in ASCII of "Y", "M", "W" and "D" for

* years, months, weeks and days, accepted in upper or lower case.

* The suffixes must occur in order.

* The number part of each section must consist of ASCII digits.

* The number may be prefixed by the ASCII negative or positive symbol.

* The number must parse to an {@code int}.

*

* The leading plus/minus sign, and negative values for other units are

* not part of the ISO-8601 standard. In addition, ISO-8601 does not

* permit mixing between the {@code PnYnMnD} and {@code PnW} formats.

* Any week-based input is multiplied by 7 and treated as a number of days.

*

* For example, the following are valid inputs:

*

* "P2Y" -- Period.ofYears(2)

* "P3M" -- Period.ofMonths(3)

* "P4W" -- Period.ofWeeks(4)

* "P5D" -- Period.ofDays(5)

* "P1Y2M3D" -- Period.of(1, 2, 3)

* "P1Y2M3W4D" -- Period.of(1, 2, 25)

* "P-1Y2M" -- Period.of(-1, 2, 0)

* "-P1Y2M" -- Period.of(-1, -2, 0)

*

*

* @param text the text to parse, not null

* @return the parsed period, not null

* @throws DateTimeParseException if the text cannot be parsed to a period

*/

public static Period parse(CharSequence text) {

// 其他代码

}

// 其他代码

}

获得年月日

period.getYears();

period.getMonths();

period.getDays();

比较方法

用between来比较日期。

LocalDate startDate = LocalDate.of(2015, 2, 20);

LocalDate endDate = LocalDate.of(2017, 1, 15);

// startDate减endDate

Period period = Period.between(startDate, endDate);

// 任何一个时间单元为负数,则返回true。true:endDate早于startDate

period.isNegative()

增减方法

Period period = Period.parse("P2Y3M5D");

period.plusDays(50);

period.minusMonths(2);

转换单位

Period period = Period.parse("P1Y2M3D");

period.toTotalMonths(); // 14

取值方法

Period period = Period.parse("P1Y2M3D");

period.getYears(); // 1

period.getMonths(); // 2

period.getDays(); // 3


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot集成Jasypt敏感信息加密的操作方法(springboot jasypt解密)
下一篇:详解Java中Duration类的使用方法(Duration类)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~