Java 解析datetime字符串在索引21上出现错误
我有一个日期字符串:Java 解析datetime字符串在索引21上出现错误,java,datetime,Java,Datetime,我有一个日期字符串: 2011-11-01T13:00:00.000 不管怎样,我似乎都无法解析这个 如果我尝试SimpleDateformat或 我最后一次尝试是: LocalDateTime datetime = LocalDateTime.parse( deliverydate, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.S")); 但这给了我一个关于索引21的错误。因为我实际上只关心日期而不关心时间,所以我是否只需要
2011-11-01T13:00:00.000
不管怎样,我似乎都无法解析这个
如果我尝试SimpleDateformat
或
我最后一次尝试是:
LocalDateTime datetime = LocalDateTime.parse(
deliverydate,
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.S"));
但这给了我一个关于索引21的错误。因为我实际上只关心日期而不关心时间,所以我是否只需要将该日期字符串作为子字符串?您指定了一位数的亚秒精度,但您有三位数。使用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);
您指定了一位数的亚秒精度,但您有三位数。使用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);
Java7/8是兼容的
Java 7的最佳解决方案(请参阅@Jon post for Java 8)
您可以在javadoc的“示例”部分找到更多示例。Java7/8是兼容的
Java 7的最佳解决方案(请参阅@Jon post for Java 8)
您可以在javadoc的“示例”部分找到更多示例。您使用过哪一版本的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());
}
}
示例断点:
编辑1
在评论之后,我已经在没有joda time的情况下(在纯Java8中)测试了上述问题,并且工作得非常好
代码:
示例断点:
您使用过哪种版本的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());
}
}
示例断点:
编辑1
在评论之后,我已经在没有joda time的情况下(在纯Java8中)测试了上述问题,并且工作得非常好
代码:
示例断点:
看看这个@elwis,如果你只想要
日期
?尝试在T的周围添加(')。查看下面的链接,我希望它能解决你的问题@A.Wali:T已经被引用了-检查模式。看看这个@elwis,你只需要Date
?尝试在T周围添加(')。查看下面的链接,我希望它能解决你的问题@A.Wali:TheT
已经被引用了-检查模式。OP使用的是java.time
API,没有理由倒退到java.util.*
这里-这只是修复格式模式的问题。不同意,他问了SimpleDateformat或DateTimeformatterTrue,但是考虑到他们可以使用java.time
,并且他们有问题的代码可以很容易地修复以继续使用它,我认为建议他们回到真正糟糕的java.util.Date
API不是一个好主意。(此外,您的答案根本无法解释更改——它只是三行代码。仅代码的答案很少有帮助。)Java 7呢?以本机方式,“java.time”仅适用于Java8,不是吗?是的,但OP显然能够使用它,因为他们提供了一个使用它的示例。如果有人不得不使用粗糙的API是一回事,但是当他们不必使用时,我认为提供一个答案让他们回到它上来不是一个好主意。OP使用的是java.time
API,没有理由在这里倒退回到java.util.*
,这只是一个修复格式模式的问题。他不同意,他问了SimpleDataFormat或DateTimeformatterTrue,但考虑到他们可以使用java.time
,并且他们有问题的代码可以很容易地修复以继续使用它,我认为建议他们回到真正糟糕的java.util.Date
API不是一个好主意。(此外,您的答案根本无法解释更改——它只是三行代码。仅代码的答案很少有帮助。)Java 7呢?以本机方式,“java.time”仅适用于Java8,不是吗?是的,但OP显然能够使用它,因为他们提供了一个使用它的示例。如果有人必须使用粗糙的API是一回事,但是当他们不一定要使用时,我认为提供一个答案让他们回到API上来不是一个好主意。哦,这确实起到了作用,我将其归咎于最近缺少咖啡和太多的.NET。谢谢你哦,这就成功了。当然,我把这归咎于咖啡的缺乏和最近太多的.NET。谢谢,他们没有使用Joda Time-他们使用的是Java 8Java.Time
API。@JonSkeet-在这种情况下,两者都可以在Java 8中不使用任何格式化程序的情况下工作。;)他们没有使用Joda Time—他们使用的是Java 8Java.Time
API。@JonSkeet—在这种情况下,两者都在Java 8中没有任何格式化程序的情况下工作。;)