首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 日期格式轉換:ISO 8601 (2013-09-06T14:15:11.557) 轉自定義格式 (2013 Sept 06 2:15)

     編輯:程式設計綜合問答

API 返回 ISO 8601 格式日期字串 2013-09-06T14:15:11.557,需轉為 2013 Sept 06 02:15。關鍵在於正確解析帶毫秒的 ISO 格式,再用目標模式格式化。

錯誤代碼分析


// 常量定義錯誤:缺少 T、時間、毫秒
public static final String DATE_FORMAT_WITHOUT_TIME = "yyyy-MM-dd"; 

// 解析會拋出 ParseException
Date date = df.parse("2013-09-06T14:15:11.557"); 

SimpleDateFormat 模式必須完全匹配輸入字串結構。

正確模式對照表

輸入字串正確模式
2013-09-06T14:15:11.557yyyy-MM-dd'T'HH:mm:ss.SSS
2013-09-06T14:15:11yyyy-MM-dd'T'HH:mm:ss
2013-09-06yyyy-MM-dd
  • 'T':單引號包裹字面字元 T
  • HH:24 小時制
  • SSS:毫秒(3 位)

完整轉換代碼


import java.text.*;
import java.util.*;

public class DateConvert {
    public static void main(String[] args) throws ParseException {
        String input = "2013-09-06T14:15:11.557";
        
        // 1. 解析:模式完全匹配輸入
        DateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
        Date date = parser.parse(input);
        
        // 2. 格式化:目標模式
        DateFormat formatter = new SimpleDateFormat("yyyy-MMM-dd hh:mm", Locale.ENGLISH);
        // MMM = 縮寫月份 (Sept),hh = 12小時制
        
        String output = formatter.format(date);
        System.out.println(output); // 2013-Sept-06 02:15
    }
}

輸出結果


2013-Sept-06 02:15

Java 8+ 現代寫法(推薦)


import java.time.*;
import java.time.format.*;

String input = "2013-09-06T14:15:11.557";
LocalDateTime ldt = LocalDateTime.parse(input, DateTimeFormatter.ISO_DATE_TIME);
// 或自定義:DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")

String output = ldt.format(DateTimeFormatter.ofPattern("yyyy-MMM-dd hh:mm", Locale.ENGLISH));
System.out.println(output); // 2013-Sept-06 02:15

優點:線程安全、不可變、API 更清晰、無需處理 ParseException。

常見坑點

  • Locale:MMM 月份縮寫依賴 Locale,中文環境輸出「9月」,須指定 Locale.ENGLISH
  • hh vs HH:hh 12小時制 (01-12),HH 24小時制 (00-23)
  • 線程安全:SimpleDateFormat 非線程安全,多線程環境用 ThreadLocal 或 Java 8 DateTimeFormatter

總結

ISO 8601 解析關鍵是模式 yyyy-MM-dd'T'HH:mm:ss.SSS 精確匹配 T 與毫秒。格式化時指定 Locale.ENGLISH 獲得英文月份縮寫。新專案優先用 Java 8 java.time 包。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved