Java8日期格式化

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();
  }

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章