Instant.now相当于java.util.Date或java 7
我有一个使用Java 7的系统,我需要生成一个相当于Instant.now相当于java.util.Date或java 7,java,datetime,java-8,java-7,datetime-format,Java,Datetime,Java 8,Java 7,Datetime Format,我有一个使用Java 7的系统,我需要生成一个相当于Instant.now(Java 8)的日期 例如,Instant.now().toString()生成如下日期: “2018-12-19T12:32:46.816Z” 使用java.util.Date我有一个日期:“2018-12-19T10:38:13.892” 我不知道是否可以在这个日期结束时简单地连接一个“Z” 如果没有“Z”,另一个使用即时解析此日期的系统将抛出错误: java.time.format.DateTimeParseExc
Instant.now
(Java 8)的日期
例如,Instant.now().toString()
生成如下日期:
“2018-12-19T12:32:46.816Z”
使用java.util.Date
我有一个日期:“2018-12-19T10:38:13.892”
我不知道是否可以在这个日期结束时简单地连接一个“Z”
如果没有“Z”,另一个使用即时解析此日期的系统将抛出错误:
java.time.format.DateTimeParseException:文本
无法在索引23处分析“2018-12-19T10:38:13.892”
位于java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1988)
位于java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890)
位于java.base/java.time.Instant.parse(Instant.java:395)
Z
意味着您可以手动将时区设置为UTC
并附加Z
:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Z
意味着您可以手动将时区设置为UTC
并附加Z
:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
三百一十个后场
现代java日期和时间API java.time已经进行了后端口。因此,只需按照Java 8中的操作:
String text = Instant.now().toString();
刚才跑步我得到:
2018-12-19T13:37:37.186Z
- 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
- 在Java6和Java7中,获取三个后端口,即新类的后端口(三个用于JSR310;请参阅底部的链接)
- 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
org.threeten.bp
导入日期和时间类
过时的SimpleDataFormat
如果您不想在迁移到Java 8或更高版本之前依赖外部依赖,那么(最)正确的解决方案是将其他两个答案(其中一个现在已删除)中的片段组合在一起:
2018-12-19T13:37:37.285Z
它并不总是给出与Instant.toString
完全相同的字符串,但它会给出一个Instant
可以在另一个系统中解析的字符串。虽然Instant.toString()
只打印所需的小数,但当其中一些为0
时,上述SimpleDataFormat
也将打印三个小数
当格式化程序的时区为UTC时,格式化模式字母(大写)X
将Z
打印为“时区”(实际上只是一个偏移量)
链接
- ,java.time的后端口
到Java6和Java7(JSR-310为三十)
java.time
java.time
String text = Instant.now().toString();
刚才跑步我得到:
2018-12-19T13:37:37.186Z
- 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
- 在Java6和Java7中,获取三个后端口,即新类的后端口(三个用于JSR310;请参阅底部的链接)
- 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
导入日期和时间类org.threeten.bp
Instant.toString
完全相同的字符串,但它会给出一个Instant
可以在另一个系统中解析的字符串。虽然Instant.toString()
只打印所需的小数,但当其中一些为0
时,上述SimpleDataFormat
也将打印三个小数
当格式化程序的时区为UTC时,格式化模式字母(大写)X
将Z
打印为“时区”(实际上只是一个偏移量)
链接
- ,java.time的后端口到Java6和Java7(JSR-310为三十)
- ,其中首先描述了
java.time
- ,Android版Three Ten Backport
- ,解释得非常透彻
- 解释如何使用
java.time
你考虑过了吗?java.time,现代java日期和时间API,已经被后传到java 6和java 7。
java.util.date
本身没有时区(这就是Z
代表的时区),因此您必须添加它。例如,格式为:sdf.setTimeZone(TimeZone.getTimeZone(“UTC”)
@Glains实际上,Z
代表UTC,表示与UTC的偏移量为零小时分秒,而不是时区。时区是特定地区人民使用的偏移量的过去、现在和未来变化的历史。java.util.Date
与java.time.Instant
一样,代表UTC中的一个时刻,因为它只是自UTC中1970年第一个时刻的历元引用以来的一个计数<代码>日期是自1970-01-01T0:00∶0Z的毫秒数,<代码>即时< /COD>是纳秒的计数,两者都以定义表示UTC中的时刻。您考虑过吗?java.time,现代java日期和时间API,已经被后传到java 6和java 7。java.util.date
本身没有时区(这就是Z
代表的时区),因此您必须添加它。例如,格式为:sdf.setTimeZone(TimeZone.getTimeZone(“UTC”)代码>@G