Java8专门新增了一个java.time包,该包下包含了如下常用的类:

Clock:该类用于获取指定时区的当前日期、时间。该类可取代System类的currentTimeMillis()方法,而且提供了更多方法来获取当前日期、时间。该类提供了大量静态方法来获取Clock对象。

Duration:该类代表持续时间。该类可以非常方便地获取一段时间。

Instant:代表一个具体的时刻,可以精确到纳秒。该类提供了静态的now()方法来获取当前时刻,也提供了静态的now(Clockclock)方法来获取clock对应的时刻。除此之外,它还提供了一系列minusXxx()方法在当前时刻基础上减去一段时间,也提供了plusXxx()方法在当前时刻基础上加上一段时间。

LocalDate:该类代表不带时区的日期,例如2007-12-03。该类提供了静态的now()方法来获取当前日期,也提供了静态的now(Clockclock)方法来获取clock对应的日期。除此之外,它还提供了minusXxx()方法在当前年份基础上减去几年、几月、几周或几日等,也提供了plusXxx()方法在当前年份基础上加上几年、几月、几周或几日等。

LocalTime:该类代表不带时区的时间,例如10:15:30。该类提供了静态的now()方法来获取当前时间,也提供了静态的now(Clockclock)方法来获取clock对应的时间。除此之外,它还提供了minusXxx()方法在当前年份基础上减去几小时、几分、几秒等,也提供了plusXxx()方法在当前年份基础上加上几小时、几分、几秒等。

LocalDateTime:该类代表不带时区的日期、时间,例如2007-12-03T10:15:30。该类提供了静态的now()方法来获取当前日期、时间,也提供了静态的now(Clockclock)方法来获取clock对应的日期、时间。除此之外,它还提供了minusXxx()方法在当前年份基础上减去几年、几月、几日、几小时、几分、几秒等,也提供了plusXxx()方法在当前年份基础上加上几年、几月、几日、几小时、几分、几秒等。

MonthDay:该类仅代表月日,例如–04-12。该类提供了静态的now()方法来获取当前月日,也提供了静态的now(Clockclock)方法来获取clock对应的月日。

Year:该类仅代表年,例如2014。该类提供了静态的now()方法来获取当前年份,也提供了静态的now(Clockclock)方法来获取clock对应的年份。除此之外,它还提供了minusYears()方法在当前年份基础上减去几年,也提供了plusYears()方法在当前年份基础上加上几年。

YearMonth:该类仅代表年月,例如2014-04。该类提供了静态的now()方法来获取当前年月,也提供了静态的now(Clockclock)方法来获取clock对应的年月。除此之外,它还提供了minusXxx()方法在当前年月基础上减去几年、几月,也提供了plusXxx()方法在当前年月基础上加上几年、几月。

ZonedDateTime:该类代表一个时区化的日期、时间。

ZoneId:该类代表一个时区。

DayOfWeek:这是一个枚举类,定义了周日到周六的枚举值。

Month:这也是一个枚举类,定义了一月到十二月的枚举值。

import java.time.*;

public class NewDatePackageTest

{

public static void main(String[] args)

{

// -----下面是关于Clock的用法-----

// 获取当前Clock

Clock clock = Clock.systemUTC();

// 通过 Clock获取当前时刻

System.out.println("当前时刻为:" + clock.instant());

// 获取 clock 对应的毫秒数,与 System.currentTimeMillis()输出相同

System.out.println(clock.millis());

System.out.println(System.currentTimeMillis());

// -----下面是关于Duration的用法-----

Duration d = Duration.ofSeconds(6000);

System.out.println("6000 秒相当于" + d.toMinutes() + "分");

System.out.println("6000 秒相当于" + d.toHours() + "小时");

System.out.println("6000 秒相当于" + d.toDays() + "天");

// 在 clock基础上增加6000 秒,返回新的 Clock

Clock clock2 = Clock.offset(clock, d);

// 可以看到 clock2 与 clock1 相差1小时40分

System.out.println("当前时刻加 6000 秒为:" +clock2.instant());

// -----下面是关于Instant的用法-----

// 获取当前时间

Instant instant = Instant.now();

System.out.println(instant);

// instant 添加 6000 秒(即 100 分钟),返回新的 Instant

Instant instant2 = instant.plusSeconds(6000);

System.out.println(instant2);

// 根据字符串解析 Instant 对象

Instant instant3 = Instant.parse("2014-02-23T10:12:35.342Z");

System.out.println(instant3);

// 在 instant3 的基础上添加5小时4分钟

Instant instant4 = instant3.plus(Duration.ofHours(5).plusMinutes(4));

System.out.println(instant4);

// 获取 instant4 的5天以前的时刻

Instant instant5 = instant4.minus(Duration.ofDays(5));

System.out.println(instant5);

// -----下面是关于LocalDate 的用法-----

LocalDate localDate = LocalDate.now();

System.out.println(localDate);

// 获得2014 年的第146 天

localDate = LocalDate.ofYearDay(2014, 146);

System.out.println(localDate); // 2014-05-26

// 设置为 2014 年5月21日

localDate = LocalDate.of(2014, Month.MAY, 21);

System.out.println(localDate); // 2014-05-21

// -----下面是关于LocalTime 的用法-----

// 获取当前时间

LocalTime localTime = LocalTime.now();

// 设置为22点33分

localTime = LocalTime.of(22, 33);

System.out.println(localTime); // 22:33

// 返回一天中的第5503 秒

localTime = LocalTime.ofSecondOfDay(5503);

System.out.println(localTime); // 01:31:43

// -----下面是关于 localDateTime 的用法-----

// 获取当前日期、时间

LocalDateTime localDateTime = LocalDateTime.now();

// 当前日期、时间加上25小时3分钟

LocalDateTime future = localDateTime.plusHours(25).plusMinutes(3);

System.out.println("当前日期、时间的25小时3分之后:" + future);

// -----下面是关于Year、YearMonth、MonthDay的用法示例-----

Year year = Year.now(); // 获取当前的年份

System.out.println("当前年份:" + year); // 输出当前年份

year = year.plusYears(5); // 当前年份再加5年

System.out.println("当前年份再过5年:" + year);

// 根据指定月份获取 YearMonth

YearMonth ym = year.atMonth(10);

System.out.println("year 年10月:" + ym); // 输出 XXXX-10,XXXX代表当前年份

// 当前年月再加5年、减3个月

ym = ym.plusYears(5).minusMonths(3);

System.out.println("year 年10月再加5年、减3个月:" + ym);

MonthDay md = MonthDay.now();

System.out.println("当前月日:" + md); // 输出--XX-XX,代表几月几日

// 设置为5月23日

MonthDay md2 = md.with(Month.MAY).withDayOfMonth(23);

System.out.println("5 月23日为:" + md2); // 输出--05-23

}

}