我使用下面的例程来验证yyyyMMddHHmm格式的日期。该例程适用于除hour = 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();
}
}发布于 2012-11-01 14:54:07
您尚未指定SimpleDateFormat的时区,我们不知道您所在的时区-但我强烈怀疑这是问题的原因。如果我将代码更改为:
SimpleDateFormat dateUtil = new SimpleDateFormat();
dateUtil.setTimeZone(TimeZone.getTimeZone("America/Chicago"));至少在一些地方(包括美国),2012年3月11日是时钟向前走的时候--例如,在Chicago,凌晨2点实际上从来没有发生过。当地时间:
01:59:58
01:59:59
03:00:00当你试图解析一个从来没有发生过的日期/时间时,Java并没有给你太多的控制,但你没有得到同样不可能的值也就不足为奇了--它很可能选择了2am发生而没有转换的时刻,比如格式为201203110300的时刻。
至于你应该如何修复它--不清楚这些数据来自哪里,或者你应该认为它来自哪个时区。也许您应该将格式的时区设置为UTC...我们不知道。
我还强烈建议使用Joda Time作为比java.util.*更好的日期/时间应用编程接口。
https://stackoverflow.com/questions/13172132
复制相似问题