Java8中18个日期处理方式
Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API。
Java处理日期、日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。
示例1: Java 8 中获取今天的日期
Java 8 中的 LocalDate 用于表示当天日期。和java.util.Date不同,它只有日期,不包含时间。当你仅需要表示日期时就用这个类。
package com.imocc.mall.test; import java.time.LocalDate; /** * Java 8 中的时间 */ public class DateUtil { public static void main(String[] args) { LocalDate today = LocalDate.now(); System.out.println("今天的日期:" + today); } }
输出结果为:
今天的日期:2020-01-16
示例2 : Java 8 中获取年、月、日信息
package com.imocc.mall.test; import java.time.LocalDate; /** * 示例2:Java 8中获取年、月、日信息 */ public class DateUtil { public static void main(String[] args) { LocalDate today = LocalDate.now(); int year = today.getYear(); int month = today.getMonthValue(); int day = today.getDayOfMonth(); System.out.println("year:"+year); System.out.println("month:"+month); System.out.println("day:"+day); } }
输出结果为:
year:2020 month:1 day:16
示例3:Java 8中处理特定日期
我们通过静态工厂方法now()非常容易地创建了当天日期,你还可以调用另一个有用的工厂方法LocalDate.of()创建任意日期, 该方法需要传入年、月、日做参数,返回对应的LocalDate实例。这个方法的好处是没再犯老API的设计错误,比如年度起始于1900,月份是从0开 始等等。
package com.imocc.mall.test; import java.time.LocalDate; /** * 示例2:Java 8中获取年、月、日信息 */ public class DateUtil { public static void main(String[] args) { LocalDate date = LocalDate.of(2020,1,16); System.out.println("自定义日期:"+date); } }
输出结果为:
自定义日期:2020-01-16
示例4:Java 8 中判断两个日期是否相等
package com.imocc.mall.test; import java.time.LocalDate; /** * 示例4:Java 8中判断两个日期是否相等 */ public class DateUtil { public static void main(String[] args) { LocalDate date1 = LocalDate.now(); LocalDate date2 = LocalDate.of(2018,2,5); if (date1.equals(date2)){ System.out.println("日期相等"); }else { System.out.println("日期不相等"); } } }
输出结果:
日期不相等
示例5:Java 8中检查像生日这种周期性事件
package com.imocc.mall.test; import java.time.LocalDate; import java.time.MonthDay; /** * 示例5:Java 8中检查像生日这种周期性事件 */ public class DateUtil { public static void main(String[] args) { LocalDate date1 = LocalDate.now(); LocalDate date2 = LocalDate.of(2018,1,16); //1月16 是生日 MonthDay birthday = MonthDay.of(date2.getMonth(),date2.getDayOfMonth()); MonthDay currentMonthDay = MonthDay.from(date1); if (currentMonthDay.equals(birthday)){ System.out.println("是你的生日"); }else { System.out.println("不是你的生日"); } } }
输出结果:
是你的生日
示例14:如何在Java 8中检查闰年
package com.imocc.mall.test; import java.time.LocalDate; /** * 示例14:如何在Java 8中检查闰年 */ public class DateUtil { public static void main(String[] args) { LocalDate date = LocalDate.now(); if (date.isLeapYear()){ System.out.println("是闰年"); }else { System.out.println("不是闰年"); } } }
输出结果:
是闰年
示例17:Java 8中如何使用预定义的格式化工具去解析或格式化日期
package com.imocc.mall.test; import java.time.LocalDate; import java.time.format.DateTimeFormatter; /** * 示例17:Java 8中如何使用预定义的格式化工具去解析或格式化日期 */ public class DateUtil { public static void main(String[] args) { String dayAfterTomorrow = "20200116"; LocalDate formatted = LocalDate.parse(dayAfterTomorrow, DateTimeFormatter.BASIC_ISO_DATE); System.out.println(dayAfterTomorrow +" 格式化后的日期为: "+formatted); } }
输出结果:
20200116 格式化后的日期为: 2020-01-16
示例18:字符串互转日期类型
package com.imocc.mall.test; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * 示例18:字符串互转日期类型 */ public class DateUtil { public static void main(String[] args) { LocalDateTime date = LocalDateTime.now(); DateTimeFormatter format1 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); //日期转字符串 String str = date.format(format1); System.out.println("日期转换为字符串:" + str); DateTimeFormatter format2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); //字符串转日期 LocalDate date2 = LocalDate.parse(str,format2); System.out.println("日期类型:"+date2); } }
输出结果:
日期转换为字符串:2020/01/16 15:07:33
日期类型:2020-01-16