我正在使用下面的例程来验证日期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();
}
}
Run Code Online (Sandbox Code Playgroud)
你没有指定时区SimpleDateFormat,我们不知道你所在的时区 - 但我强烈怀疑这是问题的原因.如果我将代码更改为:我当然可以重现该问题:
SimpleDateFormat dateUtil = new SimpleDateFormat();
dateUtil.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
Run Code Online (Sandbox Code Playgroud)
至少在某些地方(包括美国),2012年3月11日是时钟前进的时间 - 例如在芝加哥,凌晨2点实际上从未发生过.当地时间:
01:59:58
01:59:59
03:00:00
Run Code Online (Sandbox Code Playgroud)
当你试图解析一个从未发生过的日期/时间时,Java并没有给你太多的控制权,但至少你不会得到同样不可能的值也就不足为奇了 - 它可能已经选择了当时的瞬间2am将在没有转换的情况下发生,例如,其将被格式化为201203110300.
至于你应该如何修复它 - 不清楚这些数据来自何处或者你应该考虑它来自哪个时区.也许您应该将格式的时区设置为UTC ......我们不知道.
我也强烈建议使用Joda Time作为一个更好的日期/时间API java.util.*.
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |