Java日期问题,保持恢复到1935年表格2035

时间:2014-08-21 09:21:00

标签: java date testing restrictions

我遇到了一个应用程序的问题我正在测试,它会从用户那里获取几个日期参数,而测试我注意到如果我输入2034年或之前的日期,一切正常但是一旦我从21/08/34开始到21/08/35这一年回归到1935年,而不是2035年。

我使用java.util.Date类存储输入的数据,有什么想法吗?是否有可能导致此类问题的Date类的任何已知限制?

谢谢

3 个答案:

答案 0 :(得分:2)

我在Lotus Notes开发中遇到了同样的问题。我实际上认为这是理想的行为 它可能是一个时间跨度(从现在起80年),快捷方式(34..35..70)被认为是您可能想要使用的年份。

即。你说自70年代,但意思是1970年,而不是2070年。如果你从35岁开始说话,你可能意味着1935年,因为它距离今天不太远。但是,如果你从18岁开始说话,那么你可能意味着未来,因为它超出了80年的时间跨度,但在未来的近期。

它可能在某处定义,但这只是一个假设。

如果您从用户那里得到日期,请确保您获得YYYY日期,这样就不会出错。

修改
我的假设似乎是正确的:

public class Main{

public static void main(String[] args){

    String first = "August 22, 34";
    String second = "August 21, 34";
    try {
        Date date = new SimpleDateFormat("MMMM dd, yy",Locale.ENGLISH).parse(first);
        Date date2 = new SimpleDateFormat("MMMM dd, yy",Locale.ENGLISH).parse(second);
        System.out.println(date);
        System.out.println(date2);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}


}

输出为:

Wed Aug 22 00:00:00 BST 1934
Mon Aug 21 00:00:00 BST 2034

答案 1 :(得分:2)

当您使用SimpleDateFormat并以缩写形式输入年份(即不是完整的4位数表示)时会发生这种情况。

如果自创建SimpleDateFormat实例以来的过去80年(过去几年)中的任何一年,包含您输入的最后两位数字的年份,那么该年份将被视为已解析的值。

如果过去80年不包含今年,则接下来的20年(未来年)将用于表示此值。

自1934年8月21日以来,从今天(2014年8月21日)起超过80年限制的一天,未来20年,即“2034年8月21日”被视为解析价值。

您可以参考以下链接:SimpleDateFormat

(请参阅上面链接中“年度”部分下的第三个要点。)

答案 2 :(得分:0)

问题位于将日期从String转换为Date的代码中。 我可以推测你使用SimpleDateFormat和错误的格式字符串。