我正在尝试从java.util.Date格式化日期.我需要这种格式:
2016-06-10T13:38:13.687+02:00.
如何从标准日期格式正确转换它
May 04 09:51:52 CDT 2009 ?
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss z", Locale.getDefault());
sdf.format(new Date());
Run Code Online (Sandbox Code Playgroud)
遗憾的是,此代码没有返回值+02:00.
shr*_*ari 13
根据标准Java文档:https: //docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
获取日期和时间格式
2001-07-04T12:08:56.235-07:00
你需要使用下面的String模式:
"YYYY-MM-dd'T'HH:MM:ss.SSSXXX"
因此,使用以下代码,您可以得到您想要的:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.getDefault());
simpleDateFormat .format(new Date());
Run Code Online (Sandbox Code Playgroud)
SCo*_*uto 10
只需将你的z转换为upperCase即可
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z", Locale.getDefault());
sdf.format(new Date());
Run Code Online (Sandbox Code Playgroud)
结果:2016-06-10T13:53:22 +0200
是时候有人提供现代答案了。
\n\n OffsetDateTime now = OffsetDateTime.now(ZoneId.of("Africa/Cairo"));\n String formatted = now.toString();\n System.out.println(formatted);\nRun Code Online (Sandbox Code Playgroud)\n\n这是刚刚打印的
\n\n\n\n\n2018-02-28T16:42:59.628526+02:00
\n
编辑:我要求秒数保留 3 位小数,而不是 6 位。要对格式进行更多控制,请使用显式格式化程序:
\n\n DateTimeFormatter formatterWithThreeDecimals\n = DateTimeFormatter.ofPattern("uuuu-MM-dd\'T\'HH:mm:ss.SSSXXXXX");\n String formatted = now.format(formatterWithThreeDecimals);\n System.out.println(formatted);\nRun Code Online (Sandbox Code Playgroud)\n\n此打印(在我编辑时):
\n\n\n\n\n2018-04-30T15:47:41.749+02:00
\n
如果\xe2\x80\x99 不是非洲/开罗,请替换您所需的时区。指定ZoneId.systemDefault()您的 JVM\xe2\x80\x99s 时区设置。该设置可以随时由程序的另一部分或同一 JVM 中运行的另一个程序更改。
使用 java.time(现代 Java 日期和时间 API),如果您只想要一个符合 ISO 8601 的输出并且不关心有多少个小数(或者如果秒为 0 则是否打印),我们don\xe2\x80\x99 根本不需要显式格式化程序。您所需的字符串采用 ISO 8601 格式,这是现代 classes\xe2\x80\x99toString方法生成的标准格式。根据您的需要,结果toString可能会被接受。
您使用的类Date和SimpleDateFormat早已过时,而后者尤其麻烦。我建议您避免使用它们并使用现代 API。和它一起工作真是太好了。
如果您java.util.Date从旧版 API 中获得了一个您现在不想更改的 API,请将其转换为现代 API Instant,然后从那里进行进一步的转换。在 Java 8 及更高版本中,情况是这样的:
ZonedDateTime dateTime = oldfashionedDateFromLegacyApi.toInstant()\n .atZone(ZoneId.of("Africa/Cairo"));\n String formatted = dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);\nRun Code Online (Sandbox Code Playgroud)\n\n如果您使用 ThreeTen Backport 和/或 ThreeTenABP,转换的情况会略有不同,如下所示:
\n\n ZonedDateTime dateTime = DateTimeUtils.toInstant(oldfashionedDateFromLegacyApi)\n .atZone(ZoneId.of("Africa/Cairo"));\nRun Code Online (Sandbox Code Playgroud)\n\n同样,如果您想密切控制输出格式,请不要使用\xe2\x80\x99t,DateTimeFormatter.ISO_OFFSET_DATE_TIME因为它将输出 1 到 9 个小数之间的任何内容,并且如果秒为 0,也可能会省略秒。而是使用formatterWithThreeDecimals上面的 my。
是的,java.time在 Android 上运行良好。它只需要至少 Java 6。
org.threeten.bp子包中导入日期和时间类。java.time.java.time。java.time到 Java 6 和 7(ThreeTen for JSR-310)。| 归档时间: |
|
| 查看次数: |
25460 次 |
| 最近记录: |