在java中解析这种类型的日期格式?
在java中解析下面这个日期格式的最简单方法是什么?:
2010-09-18T10:00:00.000+01:00
我阅读了java中的DateFormat api,但找不到将字符串甚至这种类型的日期格式作为参数来解析的方法?当我说解析时,我的意思是我想将“日期(日月和年)”、“时间”和“时区”提取到单独的字符串对象中。
提前致谢
what would be the easiest way to parse this date format below in java?:
2010-09-18T10:00:00.000+01:00
i read the DateFormat api in java and could not find a method that takes a string or even this type of date format as a paremeter to parse? When i mean by parse i mean i want to extract the "date (day month and year)", "time" and "timezone" into seperate string objects.
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
另一个答案,因为您似乎专注于简单地将
String
分开(恕我直言,这不是一个好主意。)让我们假设该字符串是有效的 ISO8601。您能否假设它始终采用您引用的形式,或者只是有效的 8601?如果是后者,您必须应对一堆场景 这些人做到了。他们提出来验证 8601 个替代方案的正则表达式是:
弄清楚如何梳理出正确的捕获组让我头晕目眩。尽管如此,以下内容将适用于您的具体情况:
Another answer, since you seem to be focused on simply tearing the
String
apart (not a good idea, IMHO.) Let's assume the string is valid ISO8601. Can you assume it will always be in the form you cite, or is it just valid 8601? If the latter, you have to cope with a bunch of scenarios as these guys did.The regex they came up with to validate 8601 alternatives is:
Figuring out how to tease out the correct capture groups makes me woozy. Nevertheless, the following will work for your specific case:
如果您要对日期和时间进行任何重要操作,建议使用 JodaTime。请参阅这个广泛的SO讨论,包括 ISO8601。另请参阅“我应该使用本机数据/时间...”。
下面是一个示例代码片段,取自此示例,如果您想使用 JDK
SimpleDateFormat
。If you are doing anything non-trivial with dates and times, recommend the use of JodaTime. See this extensive SO discussion, including ISO8601. See also "Should I use native data/time...".
Here's an example code snippet, taken from this example, if you want to use JDK
SimpleDateFormat
.此日期采用 ISO 8601 格式。这是指向特定于此格式的解析器的链接,它使用Java SimpleDateFormat 内部解析 API。
This date is in ISO 8601 format. Here's a link to a parser specific to this format that uses the Java SimpleDateFormat parsing APIs internally.
您应该使用 SimpleDateFormat,
查找示例 < a href="http://www.java2s.com/Code/JavaAPI/java.text/newSimpleDateFormatddMMMyyyyhhmmsszzz.htm" rel="nofollow">此处 和 此处开始使用。
You should be using SimpleDateFormat,
Find examples here and here to get started.
您可以使用 javax.xml.datatype.DatatypeFactory#newXMLGregorianCalendar(String lexicalRepresentation) (API 文档)。返回的 XMLGregorianCalendar 使您可以访问所有单独的字段。
You can use
javax.xml.datatype.DatatypeFactory#newXMLGregorianCalendar(String lexicalRepresentation)
(API docs). The returned XMLGregorianCalendar gives you access to all the separate fields.使用 SimpleDateFormat,模式为 < code>yyy-MM-dd'T'HH:mm:ss.SSSZ
更新 SimpleDateFormat 不适用于 ISO 8601 日期格式。而是使用 JodaTime 代替。它提供符合 ISO 8601 的 ISOChronology /
简短的示例可以在 SO< 一个>。
Use SimpleDateFormat, with the pattern as
yyy-MM-dd'T'HH:mm:ss.SSSZ
Update SimpleDateFormat won't work with ISO 8601 date format. Rather use, JodaTime instead. It provides ISOChronology that complies with ISO 8601.
Brief example can be found on SO.
最简单的解决方案是这样的:
这将打印
Sat Sep 18 11:00:00 CEST 2010
。The easiest solution is this:
This will print
Sat Sep 18 11:00:00 CEST 2010
.如果您使用的是 Java 7 或更早版本,您可以参考这篇文章。
如果你使用 Java 8 你可以这样做:
If you are using Java 7 or earlier you can refer to this post.
If you are using Java 8 you could do: