6

我正在尝试使用 joda-time 来解析表单的日期字符串YYYY-MM-DD。我有这样的测试代码:

DateTimeFormatter dateDecoder = DateTimeFormat.forPattern("YYYY-MM-DD");
DateTime dateTime = dateDecoder.parseDateTime("2005-07-30");

System.out.println(dateTime);

哪个输出:

2005-01-30T00:00:00.000Z

如您所见,DateTime生成的对象是30 Jan 2005,而不是30 July 2005

感谢任何帮助。我只是假设这会起作用,因为它是此处列出的日期格式之一。

4

3 回答 3

5

混淆在于 ISO 格式实际上是什么。YYYY-MM-DD不是 ISO 格式,实际生成的日期是。

ISO-8601 格式也是如此,2005-07-30规范用于描述YYYY-MM-DD格式YYYY-MM-DD规范中作为模式的使用与任何代码段之间没有任何联系。规范放置的唯一限制是结果由 4 位数的年份后跟一个破折号,然后是一个 2 位数的月份,然后是一个破折号,然后是一个两位数的月份组成。

因此,规范可以使用$year4-$month2-$day2,它同样可以很好地定义输出格式。

您将需要搜索和替换任何输入模式以将“Y”转换为“y”,将“D”转换为“d”。

我还添加了一些增强的格式化文档

于 2013-10-04T11:46:25.723 回答
4

您的答案在文档中: http: //www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html

字符串格式应该类似于:“yyyy-MM-dd”。

于 2013-10-03T18:19:18.180 回答
3

w3 文档中描述的日期格式和 JodaTime 的DateTimeFormat不同。

更具体地说,在 中DateTimeFormat,模式DD是 for Day in year,所以 for 的值DD30一年中的第 30 天,即。1 月 30 日。当格式化程序读取您的日期String时,它将月份设置为07. 当它读取一年中的某一天时,它将用一01月份的时间覆盖它。

您需要使用 预期的模式字符串DateTimeFormat,而不是 w3 dat 和时间格式预期的模式字符串。在这种情况下,那将是

DateTimeFormatter dateDecoder = DateTimeFormat.forPattern("yyyy-MM-dd");
于 2013-10-06T14:17:51.337 回答