首頁 > Java > java教程 > 主體

為什麼 Java SimpleDateFormat 會將 AD 日期轉換為一月(yyyy/MM/DD 與 yyyy/MM/dd)?

Mary-Kate Olsen
發布: 2024-10-24 07:50:29
原創
958 人瀏覽過

Why Does Java SimpleDateFormat Convert AD Dates to January (yyyy/MM/DD vs yyyy/MM/dd)?

Java SimpleDateFormat 難題:所有月份預設為一月

使用Java 的SimpleDateFormat 從Active Directory 解析日期時,出現了一個令人解析日期時,出現了一個令人解析費解的問題:每個單獨的日期日期被錯誤地轉換為一月。出於對這種差異的好奇,讓我們深入研究一下說明問題的程式碼片段:

<code class="java">private Date getParsedDate(String givenString) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/DD");
    try {
        return sdf.parse(formattedString);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
    return null;
}</code>
登入後複製

在使用AD 日期值「20050912190509.0Z」執行此程式碼時,我們獲得了意外的輸出:

Value from AD is: 20050912190509.0Z
Formatted String is: 2005/09/12
Final date string is: Wed Jan 12 00:00:00 EST 2005
登入後複製

雖然準確識別了日期和年份,但月份始終被誤認為是一月。這個看似簡單的程式碼中到底隱藏著什麼秘密,卻導致了這個明顯的錯誤?

答案在於 SimpleDateFormat 模式字串中的微妙疏忽。透過指定“yyyy/MM/DD”,我們無意中強制月份格式為大寫字母“MM”。但是,Active Directory 日期值使用小寫「mm」表示月份。

要解決此問題,我們只需將模式字串調整為“yyyy/MM/dd”,小寫“dd”表示天:

<code class="java">SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");</code>
登入後複製

透過進行此細微修改, SimpleDateFormat 可以正確解釋Active Directory 中的日期,並使用正確的月份呈現最終日期字串:

Value from AD is: 20050912190509.0Z
Formatted String is: 2005/09/12
Final date string is: Wed Sep 12 00:00:00 EST 2005
登入後複製

此更正可確保Java 的SimpleDateFormat 準確解析來自Active Directory 的日期,使您能夠自信地處理歷史資料或根據特定日期範圍建立報表。

以上是為什麼 Java SimpleDateFormat 會將 AD 日期轉換為一月(yyyy/MM/DD 與 yyyy/MM/dd)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!