詳解Java中Period類的使用方法
簡介
本文用示例介紹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用法
創(chuàng)建方法
通過時間單位創(chuàng)建
如果僅一個值表示,如使用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創(chuàng)建
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} from a text string such as {@code PnYnMnD}.
* <p>
* This will parse the string produced by {@code toString()} which is
* based on the ISO-8601 period formats {@code PnYnMnD} and {@code PnW}.
* <p>
* 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}.
* <p>
* 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.
* <p>
* For example, the following are valid inputs:
* <pre>
* "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)
* </pre>
*
* @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到此這篇關于詳解Java中Period類的使用方法的文章就介紹到這了,更多相關Java Period類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中線程組ThreadGroup與線程池的區(qū)別及示例
這篇文章主要介紹了Java中線程組與線程池的區(qū)別及示例,ThreadGroup是用來管理一組線程的,可以控制線程的執(zhí)行,查看線程的執(zhí)行狀態(tài)等操作,方便對于一組線程的統(tǒng)一管理,需要的朋友可以參考下2023-05-05
Java導入新項目報錯java:JDK?isn‘t?specified?for?module解決辦法
這篇文章主要給大家介紹了關于Java導入新項目報錯java:JDK?isn‘t?specified?for?module的解決辦法,當您在導入Java項目時遇到錯誤時,可以嘗試以下面的方法來處理,需要的朋友可以參考下2024-05-05
SpringBoot項目啟動過程動態(tài)修改接口請求路徑的解決方案
在SpringBoot服務整合過程中,遇到了多個服務中相同RequestMapping路徑導致的啟動問題,解決方案是通過修改RequestMappingHandlerMapping類的getMappingForMethod方法,本文給大家介紹SpringBoot修改接口請求路徑的解決方案,感興趣的朋友一起看看吧2024-09-09

