如何将此字符串转换为日期格式

发布于 2024-12-13 16:27:57 字数 93 浏览 1 评论 0原文

我尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

青衫儰鉨ミ守葔 2024-12-20 16:27:57

您需要使用格式“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)

善良天后 2024-12-20 16:27:57

我不太确定。但如果我没记错的话,你必须在格式中用单引号将 T 引起来。

String yourFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS";

I'm not very very sure. But if I remember good, you have to surround the T by single quotes in your format.

String yourFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS";
别念他 2024-12-20 16:27:57

由于您的示例采用 24H 格式而不是 AM/PM 格式,因此

您应该使用 HH(大写)而不是 hh ,

如下所示

String EXT_JS_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";

since your example was with 24H format and not AM/PM one

you should use HH (capital) instead of hh

like this

String EXT_JS_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
以可爱出名 2024-12-20 16:27:57

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

梦言归人 2024-12-20 16:27:57

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 时间轴上的时刻。

String input = "2008-08-01T15:47:00.557";
Instant instant = Instant.parse ( input + "Z" );

转储到控制台。

System.out.println ( "instant: " + instant );

即时:2008-08-01T15:47:00.557Z

如果时区

如果您的字符串用于其他时区,我们需要指定。使用正确的时区名称(切勿使用媒体上看到的 3-4 个字母代码)。这里我们任意选择蒙特利尔时区。

对于格式化模式,我们使用 ISO 8601 的预定义格式之一: DateTimeFormatter.ISO_LOCAL_DATE_TIME (“LOCAL”表示输入中没有嵌入时区或偏移量 细绳)。

String input = "2008-08-01T15:47:00.557";
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
formatter = formatter.withZone ( zoneId );
ZonedDateTime zdt = ZonedDateTime.parse ( input , formatter );

转储到控制台。我们还从 ZonedDateTime 中提取 Instant,以便您可以看到 UTC 中的同一时刻。通常最好在业务逻辑中使用 UTC;仅应用时区来输出给用户。

System.out.println ( "input: " + input + " | zdt: " + zdt + " | instant of zdt: " + zdt.toInstant () );

输入:2008-08-01T15:47:00.557 | zdt: 2008-08-01T15:47:00.557-04:00[美国/蒙特利尔] | zdt 瞬间:2008-08-01T19:47:00.557Z

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 an Instant, a moment on the timeline in UTC.

String input = "2008-08-01T15:47:00.557";
Instant instant = Instant.parse ( input + "Z" );

Dump to console.

System.out.println ( "instant: " + instant );

instant: 2008-08-01T15:47:00.557Z

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).

String input = "2008-08-01T15:47:00.557";
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
formatter = formatter.withZone ( zoneId );
ZonedDateTime zdt = ZonedDateTime.parse ( input , formatter );

Dump to console. We also extract an Instant from the ZonedDateTime 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.

System.out.println ( "input: " + input + " | zdt: " + zdt + " | instant of zdt: " + zdt.toInstant () );

input: 2008-08-01T15:47:00.557 | zdt: 2008-08-01T15:47:00.557-04:00[America/Montreal] | instant of zdt: 2008-08-01T19:47:00.557Z

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文