新Date类和Time类背后的设计原则:
不可变类
java8之前,Date类都是可变类。当我们在多线程环境下使用它,编程人员应该确认Date对象的线程安全。Java8的Date和Time API提供了线程安全的不可变类。编程人员不用考虑并发的问题。
领域模型驱动设计方法
新的日期和时间的类别遵循“域驱动设计”。对于开发者来说,理解方法和类的功能是很容易的。
接下来让我们来看看新Date和Time API:
1.java.time.LocalDate:
LocalDate只提供日期不提供时间信息。它是不可变类且线程安全的。
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只提供时间而不提供日期信息,它是不可变类且线程安全的。
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提供时间和日期的信息,它是不可变类且线程安全的
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是用来计算两个给定的日期之间包含多少秒,多少毫秒,它是不可变类且线程安全的
6.java.time.Period:
Period是用来计算两个给定的日期之间包含多少天,多少月或者多少年,它是不可变类且线程安全的
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()); } } |