java 8 通过发布新的Date-Time API (JSR 310)来进一步加强对日期和时间的处理。
在旧版本的Java中,日期时间API存在诸多问题,其中有:
Java 8 在java.time包下提供了很多新的API。以下为两个比较重要的API:
新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during),与时钟(clock)的操作。
LocalDate/LocalTime和LocalDateTime类可以在处理时区不是必须的情况。代码如下
public class Java8Tester{ public static void main(String args[]){ Java8Tester java8Tester = new Java8Tester(); java8Tester.testLocalDateTime(); } public void testLocalDateTime(){ //获取当前日期时间 LocalDateTime currentTime = LocalDateTime.now(); System.out.println("当前时间:"+currentTime); LocalDate date1 = currentTime.toLocalDate(); System.out.println("date1: "+date1); Month month = currentTime.getMonth(); int day = currentTime.getDayOfMonth(); int senconds = currentTime.getSecond(); System.out.println("月:"+ month + ",日:" + day + ",秒:" + senconds); //指定年日 2019/09/10 LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2019); System.out.println("date2: "+ date2); //指定年月日 2019-11-10 LocalDate date3 = LocalDate.of(2019,Month.NOVEMBER,10); System.out.println("date3: "+ date3); //22时15分钟 LocalTime date4 = LocalTime.of(22,10); System.out.println("date4: "+ date4); //解析字符串 LocalTime date5 = LocalTime.parse("20:15:30"); System.out.println(date5); } }
执行以上脚本,输出结果为:
当前时间: 2018-06-08T15:19:16.910 date1:2018-06-08 月: JUNE, 日: 8, 秒: 16 date2:2012-06-10T15:19:16.910 date3:2014-12-12 date4:22:15 date5:20:15:30
如果我们需要考虑到时区,就可以使用时区的日期时间API:
public class Java8Tester { public static void main(String args[]) { Java8Tester java8Tester = new Java8Tester(); java8Tester.testZonedDateTime(); } public void testZonedDateTime() { // 获取当前时间日期 ZonedDateTime date1 = ZonedDateTime.parse("2019-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); } }
执行以上脚本,输出结果为:
date1:2015-12-03T10:15:30+08:00[Asia/Shanghai] ZoneId:Europe/Paris 当期时区: Asia/Shanghai
LocalDate today = LocalDate.now(); System.out.println("今天的日期是:"+today); System.out.println("-----------------------------"); int year = today.getYear(); int month = today.getMonthValue(); int day = today.getDayOfMonth(); System.out.println("年:"+year+",月:"+month+",日:"+day); System.out.println("-----------------------------"); LocalDate birthday = LocalDate.of(2011, 11, 11); System.out.println("特定日期:"+birthday); System.out.println("-----------------------------"); System.out.println("今天的日期是2011-11-11吗?"+today.equals(birthday)); System.out.println("-----------------------------"); LocalDate dayofbirth = LocalDate.of(2008, 11, 20); LocalDate tday = LocalDate.now(); // 获取生日的月、日 MonthDay birthMonthDay = MonthDay.of(dayofbirth.getMonth(), dayofbirth.getDayOfMonth()); MonthDay currentMonthDay = MonthDay.from(tday); if (currentMonthDay.equals(birthMonthDay)) { System.out.println("今天是你的生日"); }else{ System.out.println("对不起,今天不是你的生日"); } System.out.println("-----------------------------"); LocalTime localTime = LocalTime.now(); System.out.println("现在的时间是"+localTime); System.out.println("-----------------------------"); LocalTime twoHourLaterTime = localTime.plusHours(2); System.out.println("当前时间两小时后的时间是"+twoHourLaterTime); System.out.println("-----------------------------"); LocalDate oneWeekLaterDate = today.plus(1,ChronoUnit.WEEKS); System.out.println("两周后的日期是:"+oneWeekLaterDate); System.out.println("-----------------------------"); LocalDate oneYearBeforeDate = today.minus(1, ChronoUnit.YEARS); System.out.println("一年前的日期是:"+oneYearBeforeDate); LocalDate oneYearLaterDate = today.plus(1, ChronoUnit.YEARS); System.out.println("一年后的日期是:"+oneYearLaterDate); System.out.println("-----------------------------"); Clock clock = Clock.systemUTC(); System.out.println("Clock:"+clock); Clock.systemDefaultZone(); System.out.println("Clock:"+clock.millis()); System.out.println("-----------------------------"); LocalDate day1 = LocalDate.of(2011, 12, 15); LocalDate day2 = LocalDate.of(2011, 9, 17); System.out.println("day1是否在day2之后:"+day1.isAfter(day2)); System.out.println("day1是否在day2之前:"+day1.isBefore(day2)); System.out.println("-----------------------------"); LocalDateTime todaytime = LocalDateTime.now(); System.out.println("当前的日期时间:"+todaytime); ZoneId zone = ZoneId.of(ZoneId.SHORT_IDS.get("ACT")); ZonedDateTime dateandtimeinNewYork = ZonedDateTime.of(todaytime, zone); System.out.println("现在时区的时间在特定时区的时间:"+dateandtimeinNewYork); System.out.println("-----------------------------"); YearMonth currentYearMonth = YearMonth.now(); System.out.println("今年的当前月"+currentYearMonth+"有"+currentYearMonth.lengthOfMonth()+"天"); YearMonth creditCardExpiry = YearMonth.of(2018, Month.FEBRUARY); System.out.println("您输入的年月日期是:"+creditCardExpiry); System.out.println("-----------------------------"); System.out.println("今年"+today+"是否是闰年:"+today.isLeapYear()); System.out.println("-----------------------------"); LocalDate day3 = LocalDate.of(2002, 12, 10); LocalDate day4 = LocalDate.of(2001, 9, 12); Period period = Period.between(day3, day4); System.out.println(day3+"和"+day4+"之间相差"+period.getMonths()+"月"); System.out.println("-----------------------------"); LocalDateTime datetime = LocalDateTime.of(2016, Month.APRIL, 14, 14, 02, 24); ZoneOffset offset = ZoneOffset.of("+05:30"); OffsetDateTime offsetdatetime = OffsetDateTime.of(datetime, offset); System.out.println("日期和时间在时区上的偏移时间:"+offsetdatetime); System.out.println("-----------------------------"); Instant timestamp = Instant.now(); System.out.println("当前时间戳:"+timestamp); System.out.println("-----------------------------"); String dayaftertommrow = "20160205"; LocalDate formatdate = LocalDate.parse(dayaftertommrow,DateTimeFormatter.BASIC_ISO_DATE); System.out.println(dayaftertommrow+"格式化后的日期是"+formatdate); System.out.println("-----------------------------"); String goodFriday = "04 14 2016"; DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("MM dd yyyy"); LocalDate holiday = LocalDate.parse(goodFriday,dateTimeFormatter); System.out.println(goodFriday+"自定义格式化后的日期是"+holiday); System.out.println("-----------------------------"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM dd yyyy HH:mm a"); String datestr = todaytime.format(formatter); System.out.println("自定义格式化后的当前日期时间是"+datestr);
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句