首先,该值是LocalDateTime
,不一个LocalDate
。如果你想最终得到一个日期,我会先将它转换为LocalDateTime
,然后取日期部分。
执行日期格式化和解析时,请务必仔细阅读文档。它看起来像你使用乔达时间(由于使用forPattern
;如果你可以移动到Java 8将是有益的)。这意味着你应该阅读DateTimeFormat
docs。
目前存在的问题与你的模式:
- 你使用 'd' 而不是 'd';这意味着一年中某一天的
- 你指定的“T”没有引用它,它是不是在图案反正
- 你已经忽略你的价值
- 的几分之第二部分当值中没有时区指示符时,您已指定'zz'。
这里有一个工作示例:
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2016-07-05 02:14:35.0";
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime localDateTime = LocalDateTime.parse(text, format);
System.out.println(localDateTime);
}
}
如果实际上想在中间与T
解析值,你会使用的"yyyy-MM-dd'T'HH:mm:ss.S"
模式 - 注意T
如何再引述如此它的字面处理而不是格式说明符。
请注意,这是只是解析。它不是“将字符串转换为ISO日期格式” - 它将字符串转换为LocalDateTime
。如果您想以格式以ISO格式表示值,则需要使用DateTimeFormatter.print
,并使用适当的格式。例如,您可能要转换成的yyyy-MM-dd'T'HH:mm:ss.S
“的格式:
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2016-07-05 02:14:35.0";
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime localDateTime = LocalDateTime.parse(text, parser);
DateTimeFormatter printer = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.S");
String formatted = printer.print(localDateTime);
System.out.println(formatted); // Output 2016-07-05T02:14:35.0
}
}
上面的代码将只处理一个单一的数字几分之一秒。你可以使用.SSS
而不是.S
进行解析,但是你真的需要确定你想在不同的情况下输出什么(例如100毫秒,你想要.1还是.100?)。
参见:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_INSTANT。如果这样做不能帮助你改变模式到'YYYY-MM-DD'THH:mm:sszzz' – shachar
想问一个问题吗? ''2016-07-05 02:14:35.0“.replace(”“,”T“)' –