[英]SimpleDateFormat fails
我正在使用下面的例程來驗證yyyyMMddHHmm
格式的日期。 在日常工作以外的時間全部案件= 02。例如,它的工作原理為: 201203110000
, 201203110100
.. 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.