当前位置: 首页 > 知识库问答 >
问题:

为什么DateTimeException只发生在1月份[重复]

慕容弘懿
2023-03-14

这个错误是什么意思?

Exception in thread "AWT-EventQueue-0" java.time.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 0

它只发生在一月份

这是我的代码行

public int computeAge(Date birthDay) throws ParseException {
        LocalDate birthdate = LocalDate.of(birthDay.getYear(), birthDay.getMonth(), birthDay.getDay());
        LocalDate curDate = LocalDate.now();
        Period p = Period.between(birthdate, curDate);
        return p.getYears();
    }

共有1个答案

太叔炎彬
2023-03-14

发生这种情况是因为Date使用从0到11的月数,但LocalDate使用从1到12的月数。因此,即使您的程序没有抛出DateTimeException,它也不会给您正确的结果。

请停止使用Date类,只使用 java中的类。而不是time包。如果我记得正确的话,那些特定的方法—— getDay()getMonth(。

在这种情况下,应使用 LocalDate 而不是“日期”,因为它表示年、月和日的组合,没有时间组件。

 类似资料:
  • 问题内容: 在中,将1月定义为第0个月,而不是第1个月。是否有任何特定原因? 我已经看到很多人对此感到困惑… 问题答案: 它只是Java日期/时间API的一团糟。列出问题所在将花费很长时间(而且我确定我不知道其中一半是问题)。诚然,处理日期和时间是很棘手的,但是无论如何都是这样。 帮个忙,改用Joda Time或JSR-310。 编辑:至于原因-如其他答案所述,这很可能是由于旧的C API引起的,

  • 如果我在浏览器控制台输入这个表达式(带有严重的口音): 它将返回: 但是如果我输入这个表达式(带单引号): Math.sin'1' 它将返回错误: 你能解释一下为什么会这样吗?

  • 问题内容: -1作为转换为二进制的int表示为321。当我右移31次时,得到1(31个0和一个1)。但是当我右移32次时,我又得到-1。它不应该等于0吗? 问题答案: Java规范对移位运算符的解释如下: 如果左侧操作数的提升类型为,则仅将右侧操作数的最低5位用作移位距离。就像右手操作数受到掩码值的按位逻辑AND运算符(第15.22.1节)一样。因此,实际使用的移动距离始终在0到31(含)范围内。

  • 问题内容: 我想知道这是否是JVM错误? Java版本“ 1.6.0_0” OpenJDK运行时环境(IcedTea6 1.4.1)(6b14-1.4.1-0ubuntu13)OpenJDK 64位服务器VM(内部版本14.0-b08,混合模式) 当我运行它时会产生这个: 对于32的任意倍数,我也得到相同的结果。 我需要编写自己的右移来检查吗? 问题答案: http://docs.oracle.c

  • 我对此好奇已有一段时间了。我可以忍受,但如果没有足够的注意,它总是会咬我,所以我决定把它贴在这里。假设以下示例(Numpy版本=1.8.2): 我不知道别人怎么想,但我觉得结果不一致。最后一行是列向量,而倒数第二行是行向量,它们应该有不同的维数——在线性代数中它们有!(第5行是另一个惊喜,但我暂时忽略它)。考虑第二个例子: 现在误差的维数为(n,n)。是的,在第二行中我应该使用(n,)而不是(n,

  • 问题内容: 有一件我不理解的事情。 为什么这样 产生此错误: 问题答案: 发生这种情况是因为该模块没有名为的任何属性。该属性仅在您定义时定义。 子模块不会在您刚导入时自动导入;您需要显式导入它们。对于大多数软件包来说,情况相同,尽管软件包可以根据需要选择导入自己的子模块。(例如,如果包括一份声明, 然后 将子模块会随时导入进口。)