新Date類和Time類背后的設(shè)計(jì)原則:
不可變類
java8之前,Date類都是可變類。當(dāng)我們?cè)诙嗑€程環(huán)境下使用它,編程人員應(yīng)該確認(rèn)Date對(duì)象的線程安全。Java8的Date和Time API提供了線程安全的不可變類。編程人員不用考慮并發(fā)的問題。
領(lǐng)域模型驅(qū)動(dòng)設(shè)計(jì)方法
新的日期和時(shí)間的類別遵循“域驅(qū)動(dòng)設(shè)計(jì)”。對(duì)于開發(fā)者來說,理解方法和類的功能是很容易的。
接下來讓我們來看看新Date和Time API:
1.java.time.LocalDate:
LocalDate只提供日期不提供時(shí)間信息。它是不可變類且線程安全的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package org.smarttechie; import java.time.LocalDate; import java.time.temporal.ChronoUnit; /** * This class demonstrates JAVA 8 data and time API * @author Siva Prasad Rao Janapati * */ public class DateTimeDemonstration { /** * @param args */ public static void main(String[] args) { //Create date LocalDate localDate = LocalDate.now(); System.out.println( "The local date is :: " + localDate); //Find the length of the month. That is, how many days are there for this month. System.out.println( "The number of days available for this month:: " + localDate.lengthOfMonth()); //Know the month name System.out.println( "What is the month name? :: " + localDate.getMonth().name()); //add 2 days to the today's date. System.out.println(localDate.plus( 2 , ChronoUnit.DAYS)); //substract 2 days from today System.out.println(localDate.minus( 2 , ChronoUnit.DAYS)); //Convert the string to date System.out.println(localDate.parse( "2017-04-07" )); } } |
2.java.time.LocalTime:
LocalTime只提供時(shí)間而不提供日期信息,它是不可變類且線程安全的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package org.smarttechie; import java.time.LocalTime; import java.time.temporal.ChronoUnit; /** * This class demonstrates JAVA 8 data and time API * @author Siva Prasad Rao Janapati * */ public class DateTimeDemonstration { /** * @param args */ public static void main(String[] args) { //Get local time LocalTime localTime = LocalTime.now(); System.out.println(localTime); //Get the hour of the day System.out.println( "The hour of the day:: " + localTime.getHour()); //add 2 hours to the time. System.out.println(localTime.plus( 2 , ChronoUnit.HOURS)); //add 6 minutes to the time. System.out.println(localTime.plusMinutes( 6 )); //substract 2 hours from current time System.out.println(localTime.minus( 2 , ChronoUnit.HOURS)); } } |
3.java.time.LocalDateTime:
LocalDateTime提供時(shí)間和日期的信息,它是不可變類且線程安全的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package orr.smarttechie; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; /** * This class demonstrates JAVA 8 data and time API * @author Siva Prasad Rao Janapati * */ public class DateTimeDemonstration { /** * @param args */ public static void main(String[] args) { //Get LocalDateTime object LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDateTime); //Find the length of month. That is, how many days are there for this month. System.out.println( "The number of days available for this month:: " + localDateTime.getMonth().length( true )); //Know the month name System.out.println( "What is the month name? :: " + localDateTime.getMonth().name()); //add 2 days to today's date. System.out.println(localDateTime.plus( 2 , ChronoUnit.DAYS)); //substract 2 days from today System.out.println(localDateTime.minus( 2 , ChronoUnit.DAYS)); } } |
4.java.time.Year:
Year提供年的信息,它是不可變類且線程安全的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package orr.smarttechie; import java.time.Year; import java.time.temporal.ChronoUnit; /** * This class demonstrates JAVA 8 data and time API * @author Siva Prasad Rao Janapati * */ public class DateTimeDemonstration { /** * @param args */ public static void main(String[] args) { //Get year Year year = Year.now(); System.out.println( "Year ::" + year); //know the year is leap year or not System.out.println( "Is year[" +year+ "] leap year?" + year.isLeap()); } } |
5.java.time.Duration:
Duration是用來計(jì)算兩個(gè)給定的日期之間包含多少秒,多少毫秒,它是不可變類且線程安全的
6.java.time.Period:
Period是用來計(jì)算兩個(gè)給定的日期之間包含多少天,多少月或者多少年,它是不可變類且線程安全的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
package orr.smarttechie; import java.time.LocalDate; import java.time.Period; import java.time.temporal.ChronoUnit; /** * This class demonstrates JAVA 8 data and time API * @author Siva Prasad Rao Janapati * */ public class DateTimeDemonstration { /** * @param args */ public static void main(String[] args) { LocalDate localDate = LocalDate.now(); Period period = Period.between(localDate, localDate.plus( 2 , ChronoUnit.DAYS)); System.out.println(period.getDays()); } } |