詳解Java中Period類(lèi)的使用方法
簡(jiǎn)介
本文用示例介紹java的Period的用法。
Duration和Period
說(shuō)明
Duration類(lèi)通過(guò)秒和納秒相結(jié)合來(lái)描述一個(gè)時(shí)間量,最高精度是納秒。時(shí)間量可以為正也可以為負(fù),比如1天(86400秒0納秒)、-1天(-86400秒0納秒)、1年(31556952秒0納秒)、1毫秒(0秒1000000納秒)等。
Period類(lèi)通過(guò)年、月、日相結(jié)合來(lái)描述一個(gè)時(shí)間量,最高精度是天。時(shí)間量可以為正也可以為負(fù),例如2年(2年0個(gè)月0天)、3個(gè)月(0年3個(gè)月0天)、4天(0年0月4天)等。
這兩個(gè)類(lèi)是不可變的、線程安全的、最終類(lèi)。都是JDK8新增的。
Duration用法
見(jiàn):詳解Java中Duration類(lèi)的使用方法
創(chuàng)建方法
通過(guò)時(shí)間單位創(chuàng)建
如果僅一個(gè)值表示,如使用ofDays()方法,那么其他值為0。
若僅用ofWeeks,則其天數(shù)為week數(shù)乘以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天
通過(guò)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:開(kāi)始符,表示period(即:表示年月日);
Y:year;
M:month;
W:week;
D:day
P, Y, M, W, D都可以用大寫(xiě)或者小寫(xiě)。
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來(lái)比較日期。
LocalDate startDate = LocalDate.of(2015, 2, 20); LocalDate endDate = LocalDate.of(2017, 1, 15); // startDate減endDate Period period = Period.between(startDate, endDate); // 任何一個(gè)時(shí)間單元為負(fù)數(shù),則返回true。true:endDate早于startDate period.isNegative()
增減方法
Period period = Period.parse("P2Y3M5D");
period.plusDays(50);
period.minusMonths(2);
轉(zhuǎn)換單位
Period period = Period.parse("P1Y2M3D");
period.toTotalMonths(); // 14
取值方法
Period period = Period.parse("P1Y2M3D");
period.getYears(); // 1
period.getMonths(); // 2
period.getDays(); // 3到此這篇關(guān)于詳解Java中Period類(lèi)的使用方法的文章就介紹到這了,更多相關(guān)Java Period類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中線程組ThreadGroup與線程池的區(qū)別及示例
這篇文章主要介紹了Java中線程組與線程池的區(qū)別及示例,ThreadGroup是用來(lái)管理一組線程的,可以控制線程的執(zhí)行,查看線程的執(zhí)行狀態(tài)等操作,方便對(duì)于一組線程的統(tǒng)一管理,需要的朋友可以參考下2023-05-05
java 增強(qiáng)型for循環(huán)語(yǔ)法詳解
增強(qiáng)型 for 循環(huán)(也稱(chēng)為 “for-each” 循環(huán))是 Java 從 JDK 5 開(kāi)始引入的一種便捷循環(huán)語(yǔ)法,旨在簡(jiǎn)化對(duì)數(shù)組或集合類(lèi)的迭代操作,這篇文章主要介紹了java 增強(qiáng)型for循環(huán) 詳解,需要的朋友可以參考下2025-04-04
Java導(dǎo)入新項(xiàng)目報(bào)錯(cuò)java:JDK?isn‘t?specified?for?module解決辦法
這篇文章主要給大家介紹了關(guān)于Java導(dǎo)入新項(xiàng)目報(bào)錯(cuò)java:JDK?isn‘t?specified?for?module的解決辦法,當(dāng)您在導(dǎo)入Java項(xiàng)目時(shí)遇到錯(cuò)誤時(shí),可以嘗試以下面的方法來(lái)處理,需要的朋友可以參考下2024-05-05
自己動(dòng)手寫(xiě)一個(gè)java版簡(jiǎn)單云相冊(cè)
這篇文章主要為大家分享了自己動(dòng)手寫(xiě)的一個(gè)java版簡(jiǎn)單云相冊(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07
SpringBoot項(xiàng)目啟動(dòng)過(guò)程動(dòng)態(tài)修改接口請(qǐng)求路徑的解決方案
在SpringBoot服務(wù)整合過(guò)程中,遇到了多個(gè)服務(wù)中相同RequestMapping路徑導(dǎo)致的啟動(dòng)問(wèn)題,解決方案是通過(guò)修改RequestMappingHandlerMapping類(lèi)的getMappingForMethod方法,本文給大家介紹SpringBoot修改接口請(qǐng)求路徑的解決方案,感興趣的朋友一起看看吧2024-09-09

