gpt4 book ai didi

java - SimpleDateFormat:意外结果和意外解析异常

转载 作者:行者123 更新时间:2023-12-01 22:10:01 31 4
gpt4 key购买 nike

我在简单的日期格式方面遇到了巨大的困难。首先,我知道并非所有网站上的所有教程实际上都很好,但事实上所有非平凡格式(不是 dd/MM/yyyy)都会给出解析异常(加上我自己的测试无法按预期工作)让我很沮丧。

这是有问题的网站:http://www.mkyong.com/java/how-to-convert-string-to-date-java/

我不明白为什么会这么简单:

private static void unexpectedFailure() {
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
String dateInString = "7-Jun-2013";

try {

Date date = formatter.parse(dateInString);
System.out.println(date);
System.out.println(formatter.format(date));

} catch (ParseException e) {
e.printStackTrace();
}
}

抛出解析异常。

除此之外,我正在尝试解析我自己的日期。这段代码给出了奇怪的结果(我想说的是意想不到的):

public static void doSomething(List<String> list) { 
Iterator<String> iter = list.iterator();
String[] line = iter.next().split(" ");
System.out.println(Arrays.toString(line));
DateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
format.setLenient(true);


try {
System.out.println(line[0]+" "+line[1]);
System.out.println(format.parse(line[0]+" "+line[1]));
} catch (ParseException e) {
System.out.println("In theory this should not get caught.");
}
}

打印出这个:

[06/08/2015, 13:51:29:849, DEBUG, etc...]
06/08/2015 13:51:29:849
Thu Aug 06 13:51:29 EEST 2015

2015 年 8 月 6 日星期四 13:51:29 EEST 什么?为什么?

编辑我会尝试解释。在我的最后一个代码片段中,我只是想确定该字符串是否是日期,并且它通过了“测试”。然而,当我打印出来时,格式简直太奇怪了。我开始认为这是因为我正在打印日期。我怎样才能打印日期格式?我期待的是 dd/MM/yyyy hh:mm:ss 而不是 ddd MMM 06?时:分:秒 G YYYY

最佳答案

And I don't understand why something as simple as:
(code snipped)
Throws a parse exception.

我的猜测是,它在 Jun 上出错,这在您的系统默认区域设置中可能不是有效的月份缩写。我建议您在 SimpleDateFormat 构造函数中指定区域设置:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.US);

那么您所处理的语言环境肯定具有 Jun 作为月份缩写。

也就是说,在可能的情况下,我建议尽可能使用数字格式,最好是遵循 ISO-8601 的数字格式,例如

yyyy-MM-dd'T'HH:mm:ss

However when I'm printing it out the format is simply bizzare.

不,不是。您正在有效地使用

Date date = format.parse(line[0]+" "+line[1]);
System.out.println(date);

这就是调用 Date.toString(), documented如:

Converts this Date object to a String of the form:

dow mon dd hh:mm:ss zzz yyyy

所以这正如预期的那样工作。但是,您想要使用 SimpleDateFormat 格式化日期 - 因此您需要调用 format:

System.out.println(format.format(date));

当然,基本上只是检查它是否可以往返。

顺便说一句,我怀疑您在格式字符串中需要 HH(24 小时制)而不是 hh(12 小时制)。

关于java - SimpleDateFormat:意外结果和意外解析异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31992598/

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