我有这个日期字符串:
2011-11-01T13:00:00.000
我似乎无法解析那个问题
如果我尝试SimpleDateformat
或DateTimeformatter
我的最后一次尝试就是这个:
LocalDateTime datetime = LocalDateTime.parse(
deliverydate,
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.S"));
但是这在索引21 上给出了错误。我是否只需要对该字符串进行子串,因为我实际上只关心日期而不是时间?
答案 0 :(得分:4)
你已经指定了亚秒精度的一个数字 - 但你有三个。使用SSS
,没关系:
String text = "2011-11-01T13:00:00.000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
LocalDateTime datetime = LocalDateTime.parse(text, formatter);
另请注意,当您从“解析值”中分离出“格式化程序”时,代码的可读性会更高。
与SimpleDateFormat
不同,DateTimeFormatter
是不可变且线程安全的,因此如果您需要多次使用它,我建议将其提取到静态最终字段:
private static final DateTimeFormatter DELIVERY_DATE_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ROOT);
答案 1 :(得分:2)
Java 7/8符合ISO 8601
Java 7的最佳解决方案(参见Java 8的@Jon帖子)
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
String string1 = "2016-06-21T12:08:56.235";
Date result1 = df1.parse(string1);
您可以在SimpleDateFormat javadoc
中的示例部分找到更多示例答案 2 :(得分:0)
您使用过哪个版本的Joda-Time?
我已尝试过最新版本 - joda-time:joda-time:2.9.4
及以下代码无需任何模式即可运行:
import java.time.LocalDateTime;
public class Main {
static final String DATE_TIME = "2011-11-01T12:34:56.789";
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.parse(DATE_TIME);
System.out.println(dateTime.toString());
}
}
示例断点:
在Jon's评论之后,我在没有joda-time
的情况下测试了上述问题(在纯Java 8中)并且也运行良好。
代码:
import java.time.LocalDateTime;
public class Main {
static final String DATE_TIME = "2011-11-01T12:34:56.789";
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.parse(DATE_TIME);
System.out.println(dateTime.toString());
}
}
示例断点: