簡體   English   中英

SimpleDateFormat失敗

[英]SimpleDateFormat fails

我正在使用下面的例程來驗證yyyyMMddHHmm格式的日期。 在日常工作以外的時間全部案件= 02。例如,它的工作原理為: 201203110000201203110100 .. 201203112300

我想念什么? 這是SimpleDateFormat中的有效錯誤,還是我應該為類正確設置顯式格式才能正常工作。 我正在使用JDK 1.6.0_24。

public static void main(String[] args)
{
    SimpleDateFormat dateUtil = new SimpleDateFormat();
    Date parsedDT = null;
    String dateVal = "201203110200";
    String dateFormat = "yyyyMMddHHmm";
    dateUtil.applyPattern(dateFormat);
    try
    {
        parsedDT = dateUtil.parse(dateVal);
        if (!dateUtil.format(parsedDT).equals(dateVal))
        {
            System.err.println("error");
        }
        else
        {
            System.err.println("pass");
        }
    }
    catch (Exception exp)
    {
        exp.printStackTrace();
    }
}

您尚未指定SimpleDateFormat的時區,並且我們不知道您所在的時區-但我強烈懷疑這是問題的原因。 如果將代碼更改為:我當然可以重現該問題:

SimpleDateFormat dateUtil = new SimpleDateFormat();
dateUtil.setTimeZone(TimeZone.getTimeZone("America/Chicago"));

至少在某些地方(包括美國),時鍾是2012年3月11日前進的-例如,在芝加哥 ,凌晨2點實際上從未發生過 當地時間去了:

01:59:58
01:59:59
03:00:00

當您嘗試解析從未發生過的日期/時間時,Java並沒有給您太多控制權,但是至少沒有出現相同的不可能值也就不足為奇了-它很可能選擇了當凌晨2點將在沒有過渡的情況下發生,例如,其格式應為201203110300。

至於您應該如何解決它-目前尚不清楚該數據來自何處或應該考慮來自哪個時區。 也許您應該將格式的時區設置為UTC ...我們不知道。

我也強烈建議使用Joda Time作為比java.util.*更好的日期/時間API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM