gpt4 book ai didi

java - 在 java 的奇怪约会

转载 作者:行者123 更新时间:2023-12-03 07:07:35 26 4
gpt4 key购买 nike

以下 Java 代码仅使用 SimpleDateFormat 解析日期(带有时间部分)2009-01-28-09:11:12。让我们来看看吧。

final public class Main
{
public static void main(String[] args)
{
try
{
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
Date d = df.parse("2009-01-28-09:11:12");
System.out.println(d);
}
catch (ParseException ex)
{
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

上述代码(解析后)显示的日期(带时间)如下,

Sun Nov 30 22:07:51 IST 2008

即使我们正在尝试解析日期2009-01-28-09:11:12。看起来有些古怪。为什么会这样解析?

最佳答案

你的日期格式不应该是这样的吗:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");

匹配此格式:

Date d = df.parse("2009-01-28-09:11:12");

至于为什么,按照这个:

解析器实际上将这些视为数字,技巧是 - 是数字的一部分,代表负数。所以如果你这样做:

df.parse("2009-01-02-00:00:00")

它给出:

Mon Dec 01 00:02:00 EST 2008

将 2009 解析为 yyyy,然后将 -0 解析为 MM(这是上个月,因为月份从 1 开始),然后将 1 解析为 dd,等等。

根据 DateFormat 中的解析:

By default, parsing is lenient: If the input is not in the form used by this object's format method but can still be parsed as a date, then the parse succeeds. Clients may insist on strict adherence to the format by calling setLenient(false).

我想,如果您有选择的话,如果您喜欢像 2009/01/02 12:34:56 这样的格式,最好使用斜杠而不是破折号。这:

df.parse("2009/01/02-00:00:00")

会抛出异常:

ERROR java.text.ParseException:
Unparseable date: "2009/01/02-00:00:00"

我只能得出结论,/ 不被视为 DateFormat 的数字除法是一件非常好的事情...

关于java - 在 java 的奇怪约会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com