如何将此字符串转换为日期格式
我尝试使用 SimpleDateFormat 来完成这项工作, 但我不知道如何处理字符串“2008-08-01T15:47:00.557”中的 T,任何人都可以帮助我吗?
I tried to use SimpleDateFormat to do the work,
but I don't know how to handle the T in the string "2008-08-01T15:47:00.557", can anyone help me with this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您需要使用格式“yyyy-MM-dd'T'hh:mm:ss.SSS”。
在附加说明中,如果您尝试处理 xml 日期,请查看此问题: 将 Java 日期转换为 XML 日期格式(反之亦然)
You need to use the format "yyyy-MM-dd'T'hh:mm:ss.SSS".
In an additional note, if you are trying to handle xml dates check out this question: Convert Java Date into XML Date Format (and vice versa)
我不太确定。但如果我没记错的话,你必须在格式中用单引号将 T 引起来。
I'm not very very sure. But if I remember good, you have to surround the T by single quotes in your format.
由于您的示例采用 24H 格式而不是 AM/PM 格式,因此
您应该使用 HH(大写)而不是 hh ,
如下所示
since your example was with 24H format and not AM/PM one
you should use HH (capital) instead of hh
like this
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
API 中几乎给出了这个确切的示例,请查看:-)
http://download.oracle.com/javase/7 /docs/api/java/text/SimpleDateFormat.html
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Almost this exact example is given in the API, check it out :-)
http://download.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
ISO 8601
您的字符串格式恰好符合 ISO 8601 标准。
java.time
Java 8 及更高版本包含 java.time time 框架来取代问题和其他答案中使用的旧日期时间类。
新类在解析/生成字符串时默认使用 ISO 8601 标准。因此无需指定编码格式模式。
时区
您的输入字符串缺少任何时区或offset-from-UTC。因此,您必须指定该字符串有意义的时区。如果您不指定,解析会自动应用 JVM 当前的默认时区。不好,因为默认值可能不是用于您的字符串的区域。此外,JVM 的默认值可以随时更改,甚至在运行时也是如此。
如果 UTC
如果您的字符串打算将 UTC 作为时区,则只需附加一个
Z
(“Zulu”的缩写,表示 UTC)。然后解析为Instant
,即 UTC 时间轴上的时刻。转储到控制台。
如果时区
如果您的字符串用于其他时区,我们需要指定。使用正确的时区名称(切勿使用媒体上看到的 3-4 个字母代码)。这里我们任意选择蒙特利尔时区。
对于格式化模式,我们使用 ISO 8601 的预定义格式之一:
DateTimeFormatter.ISO_LOCAL_DATE_TIME
(“LOCAL”表示输入中没有嵌入时区或偏移量 细绳)。转储到控制台。我们还从
ZonedDateTime
中提取Instant
,以便您可以看到 UTC 中的同一时刻。通常最好在业务逻辑中使用 UTC;仅应用时区来输出给用户。ISO 8601
Your string’s format happens to comply with the ISO 8601 standard.
java.time
Java 8 and later includes the java.time framework to supplant the old date-time classes used in the Question and in other Answers.
The new classes use the ISO 8601 standard by default when parsing/generating strings. So no need to specify a coded format pattern.
Time Zone
Your input string lacks any time zone or offset-from-UTC. So you must specify the time zone for which this string has meaning. If you do not specify, the parsing automatically applies your JVM’s current default time zone. Not good as that default may not be the zone intended for your string. Also, the JVM’s default can change at any moment, even during runtime.
If UTC
If your string was meant for UTC as the time zone, simply append a
Z
(short for “Zulu” which means UTC). Then parse as anInstant
, a moment on the timeline in UTC.Dump to console.
If Time Zone
If your string was intended for some other time zone, we need to specify. Use a proper time zone name (never the 3-4 letter codes seen in the press). Here we arbitrarily choose the Montréal time zone.
For the formatting pattern, we use one of the predefined formats for ISO 8601:
DateTimeFormatter.ISO_LOCAL_DATE_TIME
(the 'LOCAL' means no time zone or offset embedded within the input string).Dump to console. We also extract an
Instant
from theZonedDateTime
so you can see the same moment in UTC. Usually best to work in UTC in your business logic; only apply a time zone for output to the user.