具有示例的java.time.Period类
时间:2020-01-09 10:35:17 来源:igfitidea点击:
java.time.Period类是Java 8中添加的新日期和时间API的一部分,该API表示ISO-8601日历系统中基于日期的时间,例如" 4年,2个月和10天"。
Java Period类以年,月和日为单位对数量或者时间进行建模。这三个字段始终存在,但可以设置为零。
时段类在添加到ZonedDateTime时不考虑夏令时,而是添加一个概念性的日期,以尝试维护本地时间。例如,考虑将夏令时间隔之前的一天的时间增加到晚上18:00。 Period将添加概念日,并在第二天的18:00产生ZonedDateTime。
Period类中的of()方法
我们可以使用以下方法获取Period类的实例:
- of(int years, int months, int days)
- ofDays(int days)
- ofMonths(int months)
- ofWeeks(int weeks)
- ofYears(int years)
public class PeriodExample { public static void main(String[] args) { Period period = Period.of(2019, 10, 25); System.out.println("Period- " + period); // Year and month as 0 period = Period.ofDays(28); System.out.println("Period- " + period); // Year and days as 0 period = Period.ofMonths(11); System.out.println("Period- " + period); } }
输出:
Period- P2019Y10M25D Period- P28D Period- P11M
使用ween()方法查找两个LocalDate之间的差异
Period类中的一种重要方法是between()方法,使用该方法可以获取一个由两个日期之间的年,月和日组成的Period。
Java示例,用于查找两个LocalDate对象之间的年,月和日差异。
public class PeriodExample { public static void main(String[] args) { LocalDate ld1 = LocalDate.of(2017, 7, 30); LocalDate ld2 = LocalDate.now(); System.out.println("From Date- " + ld1); System.out.println("To Date- " + ld2); // Find difference Period period = Period.between(ld1, ld2); System.out.println("Difference between dates- " + period.getYears() + " Year(s) " + period.getMonths()+ " Month(s) " + period.getDays() + " Day(s)"); } }
输出:
From Date- 2017-07-30 To Date- 2019-11-11 Difference between dates- 2 Year(s) 3 Month(s) 12 Day(s)
从给定日期开始的正负几天,几周,几个月或者一年
使用plus(TemporalAmount amountToAdd)和minus(TemporalAmount amountToSubtract)方法可以从给定的LocalDate中添加或者减去Period。请注意,Period类实现TemporalAmount。
public class PeriodExample { public static void main(String[] args) { LocalDate ld = LocalDate.of(2019, 10, 25); System.out.println("LocalDate- " + ld); System.out.println("Plus 2 Years " + ld.plus(Period.ofYears(2))); System.out.println("Plus 3 Months " + ld.plus(Period.ofMonths(3))); System.out.println("Plus 20 Days " + ld.plus(Period.ofDays(20))); System.out.println("Plus 3 Weeks " + ld.plus(Period.ofWeeks(3))); } }
输出:
LocalDate- 2019-10-25 Plus 2 Years 2021-10-25 Plus 3 Months 2020-01-25 Plus 20 Days 2019-11-14 Plus 3 Weeks 2019-11-15
public class PeriodExample { public static void main(String[] args) { LocalDate ld = LocalDate.of(2019, 10, 25); System.out.println("LocalDate- " + ld); System.out.println("Minus 2 Years " + ld.minus(Period.ofYears(2))); System.out.println("Minus 3 Months " + ld.minus(Period.ofMonths(3))); System.out.println("Minus 20 Days " + ld.minus(Period.ofDays(20))); System.out.println("Minus 3 Weeks " + ld.minus(Period.ofWeeks(3))); } }
输出:
LocalDate- 2019-10-25 Minus 2 Years 2017-10-25 Minus 3 Months 2019-07-25 Minus 20 Days 2019-10-05 Minus 3 Weeks 2019-10-04
将字符串转换为句点– parse()方法
parse(CharSequence text)从文本字符串(例如PnYnMnD)获取一个Period。
在" PnYnMnWnD"格式中," Y"," M"," W"和" D"表示年,月,周和日,均以大写或者小写字母表示。后缀必须按顺序出现。
public class PeriodExample { public static void main(String[] args) { Period period = Period.parse("P2Y4M3W4D"); System.out.println("Period- " + period); period = Period.parse("P1Y7M7D"); System.out.println("Period- " + period); period = Period.parse("-P1Y2M"); System.out.println("Period- " + period); } }
输出:
Period- P2Y4M25D Period- P1Y7M7D Period- P-1Y-2M