Com*_*red 2 java datetime datetime-format java-7 java-8
我有一个使用 Java 7 的系统,我需要生成一个与Instant.now(Java 8) 等效的日期。
例如,Instant.now().toString()生成如下日期:
“2018-12-19T12:32:46.816Z”
使用java.util.Date我有这个日期:“2018-12-19T10:38:13.892”
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat sdf;
sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
String text = sdf.format(date);
System.out.println(text);
Run Code Online (Sandbox Code Playgroud)
我不知道是否可以简单地在该日期末尾连接一个“Z” 。
如果没有“Z”,另一个解析此日期的系统Instant.parse会抛出错误:
java.time.format.DateTimeParseException:无法在 java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1988) 的索引 23 处解析文本“2018-12-19T10:38:13.892” .base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890) 在 java.base/java.time.Instant.parse(Instant.java:395)
java.time(现代 Java 日期和时间 API)已向后移植。所以就像在 Java 8 中一样:
\n\n String text = Instant.now().toString();\nRun Code Online (Sandbox Code Playgroud)\n\n刚才运行我得到:
\n\n\n\n\n2018-12-19T13:37:37.186Z
\n
org.threeten.bp子包中导入日期和时间类。如果您在迁移到 Java 8 或更高版本之前不想依赖外部依赖项,那么(最)正确的解决方案是其他两个答案中的部分的组合(其中一个现已删除):
\n\n SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss.SSSXX");\n sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));\n String text = sdf.format(System.currentTimeMillis());\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n2018-12-19T13:37:37.285Z
\n
它并不总是给出与 完全相同的字符串,但它会给出一个可以在其他系统中解析的Instant.toString字符串。Instant虽然Instant.toString()只打印所需数量的小数,SimpleDateFormat但当其中一些是 时,上面的代码也会打印三位小数0。
当格式化程序的时区为 UTC 时,格式模式字母(大写)X将打印Z为 \xe2\x80\x9ctime zone\xe2\x80\x9d (实际上只是一个偏移量)。
java.time到 Java 6 和 7(ThreeTen for JSR-310)。java.time。java.time.| 归档时间: |
|
| 查看次数: |
6860 次 |
| 最近记录: |