首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleDateFormat失败

SimpleDateFormat失败
EN

Stack Overflow用户
提问于 2012-11-01 14:35:18
回答 1查看 455关注 0票数 2

我使用下面的例程来验证yyyyMMddHHmm格式的日期。该例程适用于除hour = 02以外的所有情况。例如,它适用于:201203110000201203110100201203112300

我遗漏了什么?这是SimpleDateFormat中的一个有效错误吗?或者我应该显式地设置格式才能让类正常工作。我使用的是JDK 1.6.0_24。

代码语言:javascript
复制
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();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-01 14:54:07

您尚未指定SimpleDateFormat的时区,我们不知道您所在的时区-但我强烈怀疑这是问题的原因。如果我将代码更改为:

代码语言:javascript
复制
SimpleDateFormat dateUtil = new SimpleDateFormat();
dateUtil.setTimeZone(TimeZone.getTimeZone("America/Chicago"));

至少在一些地方(包括美国),2012年3月11日是时钟向前走的时候--例如,在Chicago,凌晨2点实际上从来没有发生过。当地时间:

代码语言:javascript
复制
01:59:58
01:59:59
03:00:00

当你试图解析一个从来没有发生过的日期/时间时,Java并没有给你太多的控制,但你没有得到同样不可能的值也就不足为奇了--它很可能选择了2am发生而没有转换的时刻,比如格式为201203110300的时刻。

至于你应该如何修复它--不清楚这些数据来自哪里,或者你应该认为它来自哪个时区。也许您应该将格式的时区设置为UTC...我们不知道。

我还强烈建议使用Joda Time作为比java.util.*更好的日期/时间应用编程接口。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13172132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档