Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 我如何解析;YYYY-MM-DD“;和乔达在一起_Date_Jodatime - Fatal编程技术网

Date 我如何解析;YYYY-MM-DD“;和乔达在一起

Date 我如何解析;YYYY-MM-DD“;和乔达在一起,date,jodatime,Date,Jodatime,我正在尝试使用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 如您所

我正在尝试使用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
对象是
2005年1月30日
,而不是
2005年7月30日


谢谢你的帮助。我认为这是可行的,因为它是列出的日期格式之一。

您的答案在文档中:


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

与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”


我还添加了一些增强的格式。

中描述的日期格式与JodaTime的
DateTimeFormat
不同

更具体地说,在中,
DD
模式表示一年中的
Day
,因此
30
DD
值是一年中的第30天,即1月30日。当格式化程序读取日期
字符串时,它会将月份设置为
07
。当它读取一年中的某一天时,它将用1月份的
01
覆盖该日期

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

DateTimeFormatter dateDecoder = DateTimeFormat.forPattern("yyyy-MM-dd");

谢谢你,吉姆。我应该说,我确实尝试过SimpleDateFormat风格的日期,可以看出它对这些日期很有效。我只是觉得既然joda time docs声明它支持ISO8601格式的日期,那么我认为它会支持它们。不用担心。。。我会想出别的办法的。谢谢