Java DateFormat 和 SimpleDateFormat 返回不正确的日期

标签 java date date-format simpledateformat

今天是 2010 年 2 月 9 日星期二,当我打印日期时,我得到了错误的日期:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

Date today = formatter.parse(String.format("%04d-%02d-%02d",
        Calendar.getInstance().get(Calendar.YEAR),
        Calendar.getInstance().get(Calendar.MONTH),
        Calendar.getInstance().get(Calendar.DAY_OF_MONTH)));

System.out.println("Today is " + today.toString());

打印行结果为:“Today is Sat Jan 09 00:00:00 CST 2010”

这肯定不是 1 月 9 日星期六,而是 2 月 9 日星期二。我假设我做错了什么,所以有人可以让我知道这里出了什么问题吗?我必须手动设置星期几吗?

更新 注意:我不想使用 new Date() 初始化今天,因为我希望将小时、分钟、秒和毫秒初始化为 0。这是必要的,这样我就可以将用户输入的日期与今天进行比较:如果用户输入今天的日期并且我使用格式化程序构造一个 Date 对象,那么如果我使用 new Date() 初始化今天并且我比较两个日期 - 今天将晚于用户选择的日期(这是不正确的)。因此,我需要在今天开始时初始化,没有小时/分钟/秒/毫秒。

最佳答案

令人困惑的是,日历月份从 0(一月)到 11(十二月)计数,因此当您从日历中提取 MONTH 字段时,您将“2010-01-09”传递给 formatter.parse()。

相关的 SO question 对此进行了讨论.

关于Java DateFormat 和 SimpleDateFormat 返回不正确的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2233629/

相关文章:

c# - 自动将 View 中的元素映射到 dateTime 类型的模型

java - 为什么 string to date 和 back to string 会导致两个不同的字符串?

java - Java 中 TSV 文件的验证

当前日期所在的MySQL查询值

javascript - 使用 JS Date 对象以毫秒为单位获取当前时间的最快最轻的方法

regex - 正则表达式匹配日期中的有效日期

java - 从时间戳获取日期

java - 套接字问题 c# 客户端到 java 服务器

java - 当观察者需要不同的参数更新时,观察者设计模式中该怎么做

java - 将 Action 监听器添加到 RadioPanel