7.4.3 Java8新增的日期 时间包
java8
开始专门新增了一个java.time
包,该包下包含了如下常用的类。
时间类 |
描述 |
Clock |
该类用于获取指定时区的当前日期、时间。该类可取代System 类的currentTimeMillis() 方法,而且提供了更多方法来获取当前日期、时间。该类提供了大量静态方法来获取Clock 对象. |
Duration |
该类代表持续时间。该类可以非常方便地获取一段时间。 |
Instant |
代表一个具体的时刻,可以精确到纳秒。该类提供了静态的now() 方法来获取当前时刻,也提供了静态的now(Clock clock) 方法来获取clock 对应的时刻。除此之外,它还提供了一系列minusXxx() 方法在当前时刻基础上减去一段时间,也提供了plusXxx() 方法在当前时刻基础上加上一段时间。 |
LocalDate |
该类代表不带时区的日期,例如2007-12-03。该类提供了静态的now() 方法来获取当前日期,也提供了静态的now(Clock clock) 方法来获取clock 对应的日期。除此之外,它还提供了minusXxx() 方法在当前年份基础上减去几年 、几月 、几周 或几日 等,也提供了plusXxx() 方法在当前年份基础上加上几年、几月、几周或几日等 |
LocalTime |
该类代表不带时区的时间,例如10:15:30。该类提供了静态的now() 方法来获取当前时间,也提供了静态的now(Clock clock) 方法来获取clock 对应的时间。除此之外,它还提供了minusXxx() 方法在当前年份基础上减去几小时 、几分 、几秒 等,也提供了plusXxx() 方法在当前年份基础上加上几小时、几分、几秒等。 |
LocalDateTime |
该类代表不带时区的日期、时间,例如2007-12-03T10:15:30。该类提供了静态的now() 方法来获取当前日期、时间,也提供了静态的now(Clock clock) 方法来获取clock 对应的日期、时间。除此之外,它还提供了minusXxx() 方法在当前年份基础上减去几年、几月、几日、几小时、几分、几秒等,也提供了plusXxxO 方法在当前年份基础上加上几年、几月、几日几小时、几分、几秒等。 |
MonthDay |
该类仅代表月日,例如-04-12。该类提供了静态的now() 方法来获取当前月日,也提供了静态的now(Clock clock) 方法来获取clock 对应的月日。 |
Year |
该类仅代表年,例如2014。该类提供了静态的now() 方法来获取当前年份,也提供了静态的now(Clock clock) 方法来获取clock 对应的年份。除此之外,它还提供了minusYears 方法在当前年份基础上减去几年,也提供了plusYears() 方法在当前年份基础上加上几年 |
YearMonth |
该类仅代表年月,例如2014-04。该类提供了静态的now() 方法来获取当前年月,也提供了静态的now(Clock clock) 方法来获取clock 对应的年月。除此之外,它还提供了minusXxx() 方法在当前年月基础上减去几年、几月,也提供了plusXxx() 方法在当前年月基础上加上几年、几月。 |
ZonedDateTime |
该类代表一个时区化的日期、时间. |
Zoned |
该类代表一个时区。 |
DayOfWeek |
这是一个枚举类,定义了周日到周六的枚举值。 |
Month |
这也是一个枚举类,定义了一月到十二月的枚举值。 |
程序示例
下面通过一个简单的程序来示范这些类的用法
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| import java.time.*;
public class NewDatePackageTest { public static void main(String[] args) { Clock clock = Clock.systemUTC(); System.out.println("当前时刻为:" + clock.instant()); System.out.println(clock.millis()); System.out.println(System.currentTimeMillis()); Duration d = Duration.ofSeconds(6000); System.out.println("6000秒相当于" + d.toMinutes() + "分"); System.out.println("6000秒相当于" + d.toHours() + "小时"); System.out.println("6000秒相当于" + d.toDays() + "天"); Clock clock2 = Clock.offset(clock, d); System.out.println("当前时刻加6000秒为:" + clock2.instant()); Instant instant = Instant.now(); System.out.println(instant); Instant instant2 = instant.plusSeconds(6000); System.out.println(instant2); Instant instant3 = Instant.parse("2014-02-23T10:12:35.342Z"); System.out.println(instant3); Instant instant4 = instant3.plus(Duration.ofHours(5).plusMinutes(4)); System.out.println(instant4); Instant instant5 = instant4.minus(Duration.ofDays(5)); System.out.println(instant5); LocalDate localDate = LocalDate.now(); System.out.println(localDate); localDate = LocalDate.ofYearDay(2014, 146); System.out.println(localDate); localDate = LocalDate.of(2014, Month.MAY, 21); System.out.println(localDate); LocalTime localTime = LocalTime.now(); localTime = LocalTime.of(22, 33); System.out.println(localTime); localTime = LocalTime.ofSecondOfDay(5503); System.out.println(localTime); LocalDateTime localDateTime = LocalDateTime.now(); LocalDateTime future = localDateTime.plusHours(25).plusMinutes(3); System.out.println("当前日期、时间的25小时3分之后:" + future); Year year = Year.now(); System.out.println("当前年份:" + year); year = year.plusYears(5); System.out.println("当前年份再过5年:" + year); YearMonth ym = year.atMonth(10); System.out.println("year年10月:" + ym); ym = ym.plusYears(5).minusMonths(3); System.out.println("year年10月再加5年、减3个月:" + ym); MonthDay md = MonthDay.now(); System.out.println("当前月日:" + md); MonthDay md2 = md.with(Month.MAY).withDayOfMonth(23); System.out.println("5月23日为:" + md2); } }
|