Date Time API
老版问题
以前时间类存在的问题
1.date是可变的,是线程不安全的。
2.类比较多,既有java.util.Date、又有java.sql.Date,同时Data的format和parse又在java.util.txt下。
新版特性
1.不变性:在新的时间API中,所有的类都是不变的,加上final。
2.清晰:每个类中都定义了parse和format方法。
3.实用:每个类都实现了加、减等方法。
新版核心类
LocalDate: java8中的日期
LocalTime: java8中的时间
LocalTime: java8中的日期时间
案例
日期:LocalDate
@Test public void localDateTest() { LocalDate today = LocalDate.now(); System.out.println(today); LocalDate firstDay_2017 = LocalDate.of(2017, Month.JANUARY, 1); System.out.println("Specific Date="+firstDay_2017); LocalDate todayShanghai = LocalDate.now(ZoneId.of("Asia/Shanghai")); System.out.println(todayShanghai); }
时间: LocalTime
@Test public void localTimeTest() { LocalTime toTime = LocalTime.now(); System.out.println(toTime); LocalTime time = LocalTime.of(12,35,26,266); System.out.println(time); LocalTime timeKolkata = LocalTime.now(ZoneId.of("Asia/Kolkata")); System.out.println("Current Time in IST="+timeKolkata); }
日期时间:LocalDateTime
@Test public void localDateTimeTest() { LocalDateTime currentTime = LocalDateTime.now(); System.out.println(currentTime); LocalDateTime dateTime = LocalDateTime.of(2017, Month.FEBRUARY,12,15,52,16,235); System.out.println(dateTime); LocalDateTime todayKolkata = LocalDateTime.now(ZoneId.of("Asia/Kolkata")); System.out.println("Current Date in IST="+todayKolkata); }
基本操作,增加修改等
@Test public void dateTimeOperateTest() { LocalDateTime currentTime = LocalDateTime.now(); System.out.println("currentTime:" + currentTime); LocalDateTime plusOneHours = currentTime.plusHours(1); System.out.println("plus 1 hour:" + plusOneHours); LocalDateTime plusTwoDay = currentTime.plusDays(2); System.out.println("plus 2 Day:" + plusTwoDay); LocalDateTime setHour0 = currentTime.withHour(0); System.out.println("setHour0:" + setHour0); //such as 'GMT+2' or 'UTC+01:00' currentTime.atZone(ZoneId.of("GMT+2")); System.out.println("GMT+2:" + currentTime); }
格式化和解析
@Test public void parseOrFormatTest() { LocalDateTime currentTime = LocalDateTime.now(); System.out.println(currentTime.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"))); LocalDateTime parseTime = LocalDateTime.parse("2017年09月19日 12:12:12", DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss")); System.out.println(parseTime); }