Java 8 在 java.time 包下提供了很多新的 API。以下为两个比较重要的 API:
Local(本地) − 简化了日期时间的处理,没有时区的问题。
Zoned(时区) − 通过制定的时区处理日期时间。
public static void main(String args[]){
DateTest dateTest = new DateTest();
dateTest.testLocalDateTime();
dateTest.testZonedDateTime();
}
public void testLocalDateTime(){
// 获取当前的日期时间
LocalDateTime currentTime = LocalDateTime.now();
System.out.println("当前时间: " + currentTime);
LocalDate date1 = currentTime.toLocalDate();
System.out.println("只有年月日: " + date1);
Month month = currentTime.getMonth();
int day = currentTime.getDayOfMonth();
int seconds = currentTime.getSecond();
System.out.println("月: " + month +", 日: " + day +", 秒: " + seconds);
LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
System.out.println("指定年月: " + date2);
// 12 december 2014
LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
System.out.println("指定年月日: " + date3);
// 22 小时 15 分钟
LocalTime date4 = LocalTime.of(22, 15);
System.out.println("指定时分: " + date4);
// 解析字符串
LocalTime date5 = LocalTime.parse("20:15:30");
System.out.println("解析字符串: " + date5);
}
public void testZonedDateTime(){
// 获取当前时间日期
ZonedDateTime date1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]");
System.out.println("date1: " + date1);
ZoneId id = ZoneId.of("Europe/Paris");
System.out.println("ZoneId: " + id);
ZoneId currentZone = ZoneId.systemDefault();//获取当前时区
System.out.println("当前时区: " + currentZone);
Set set = ZoneId.getAvailableZoneIds();//获取所有时区
set.forEach(System.out::println);
ZonedDateTime date2 = ZonedDateTime.now();//获取当前时间和时区
System.out.println("date2: " + date2);
}
输出信息如下:
当前时间: 2018-07-27T10:45:26.288
只有年月日: 2018-07-27
月: JULY, 日: 27, 秒: 26
指定年月: 2012-07-10T10:45:26.288
指定年月日: 2014-12-12
指定时分: 22:15
解析字符串: 20:15:30
date1: 2015-12-03T10:15:30+08:00[Asia/Shanghai]
ZoneId: Europe/Paris
当前时区: Asia/Shanghai
Asia/Aden
America/Cuiaba
Etc/GMT+9
Etc/GMT+8
Africa/Nairobi
America/Marigot
Asia/Aqtau (所有的时区)
date2: 2018-07-27T10:45:26.357+08:00[Asia/Shanghai]