我正在尝试使用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
。
感谢任何帮助。我只是假设这会起作用,因为它是here列出的日期格式之一。
答案 0 :(得分:5)
混淆是ISO格式实际上是什么。 YYYY-MM-DD
不是ISO格式,实际结果日期是。
所以2005-07-30
ISO-8601格式,规范使用YYYY-MM-DD
描述格式。使用YYYY-MM-DD
作为规范中的模式与任何代码之间没有任何联系。规范的唯一约束是,结果包括一个4位数年份,后面跟一个破折号,后跟一个2位数的月份,然后是破折号,然后是两位数的日期。
因此,规范可以使用$year4-$month2-$day2
,这同样可以定义输出格式。
您需要搜索并替换任何输入模式,将“Y”转换为“y”,将“D”转换为“d”。
我还添加了一些增强的documentation格式。
答案 1 :(得分:4)
您的回答是在文档中:http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html
字符串格式应该类似于:“yyyy-MM-dd”。
答案 2 :(得分:3)
the w3 document和JodaTime DateTimeFormat
中描述的日期格式不同。
更具体地说,在DateTimeFormat
中,模式DD
适用于Day in year
,因此DD
的{{1}}的值是一年中的第30天,即。 1月30日。格式化程序在阅读您的日期30
时,会将月份设置为String
。当它读取一年中的某一天时,它将在1月份用07
覆盖该日期。
您需要使用01
期望的模式字符串,而不是w3数据和时间格式所期望的模式字符串。在这种情况下,那将是
DateTimeFormat