Java8日期格式化 Bertha 。 2021-12-10 07:51 331阅读 0赞 Java8之前的版本,格式化日期常使用SimpleDateFormat,但这个类并不是线程安全的,通常要用作局部变量或者使用ThreadLocal包装。或者使用额外的joda time 依赖来对日期进行操作。 但是到了Java8,这类烦恼都没有了,全新的日期api可以快速实现日期格式化。 **1.日期格式化-日期类型的字符串转换成其他形式** /** * 不带时分秒的日期字符串转化 * * @param input 输入的日期 * @param inputFormat 输入日期的格式 * @param outputFormat 输出日期的格式 * @return 输出的日期,不带时分秒 */ public static String formattedDate(String input, String inputFormat, String outputFormat) { DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(inputFormat); LocalDate localDate = LocalDate.parse(input, inputFormatter); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputFormat); return localDate.format(outputFormatter); } 测试代码及输出: String output1 = formattedDate("2019年07月15日", "yyyy年MM月dd日", "yyyy-MM-dd"); String output2 = formattedDate("2019/07/16", "yyyy/MM/dd", "yyyy-MM-dd"); String output3 = formattedDate("2019-07-16", "yyyy-MM-dd", "yyyy/MM/dd"); System.out.println(output1); System.out.println(output2); System.out.println(output3); 2019-07-15 2019-07-16 2019/07/16 注意,使用LocalDate + DateTimeFormatter仅仅能够转换不带时分秒的日期格式! **2.日期格式化-带时分秒的日期类型的字符串转换成其他形式** /** * 带时分秒的日期字符串转换 * * @param input 输入的日期 * @param inputFormat 输入日期的格式 * @param outputFormat 输出日期的格式 * @return 输出指定格式的日期,可以带时分秒,也可以不带 */ public static String formattedDateTime(String input, String inputFormat, String outputFormat) { DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(inputFormat); LocalDateTime localDateTime = LocalDateTime.parse(input, inputFormatter); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputFormat); return localDateTime.format(outputFormatter); } 测试代码及输出: String output1 = formattedDateTime("20190713000000", "yyyyMMddHHmmss", "yyyy-MM-dd"); String output2 = formattedDateTime("20190713000000", "yyyyMMddHHmmss", "yyyy-MM-dd HH:mm:ss"); String output3 = formattedDateTime("2019年07月14日00时00分00秒", "yyyy年MM月dd日HH时mm分ss秒", "yyyy/MM/dd"); String output4 = formattedDateTime("2019年07月14日00时00分00秒", "yyyy年MM月dd日HH时mm分ss秒", "yyyyMMddHHmmss"); String output5 = formattedDateTime("2019-07-15 00:00:00", "yyyy-MM-dd HH:mm:ss", "yyyyMMdd"); String output6 = formattedDateTime("2019-07-15 00:00:00", "yyyy-MM-dd HH:mm:ss", "yyyy年MM月dd日HH时mm分ss"); System.out.println(output1); System.out.println(output2); System.out.println(output3); System.out.println(output4); System.out.println(output5); System.out.println(output6); 2019-07-13 2019-07-13 00:00:00 2019/07/14 20190714000000 20190715 2019年07月15日00时00分00 注意:使用LocalDateTime + DateTimeFormatter 可以将指定日期类型转换成任意形式的日期类型。 **3.Date和LocalDateTime互转:** /** * LocalDateTime -> Date */ public static Date toDate(LocalDateTime localDateTime) { ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zdt = localDateTime.atZone(zoneId); return Date.from(zdt.toInstant()); } /** * Date -> LocalDateTime */ public static LocalDateTime toLocalDateTime(Date date) { Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); return instant.atZone(zoneId).toLocalDateTime(); }
还没有评论,来说两句吧...