gpt4 book ai didi

java - 如何将ISO8601格式转换成毫秒?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:02 26 4
gpt4 key购买 nike

考虑到 ISO8601 在 JSON 中的使用频率,我还没有找到真正简单的方法,这让我感到非常惊讶。

基本上,我采用如下所示的字符串:2014-10-23T00:35:14.800Z 并将其转换为类似 50 分钟前 的内容。

首先,我必须将 2014-10-23T00:35:14.800Z 更改为 2014-10-23'T'00:35:14.800Z,然后我需要将它转换为毫秒,然后很容易。

我当前的代码:

private void setTimestamp(String timeCreated) {
int indexOfT = timeCreated.indexOf('T');

String properFormat = new StringBuilder(timeCreated).insert(indexOfT + 1, "'")
.insert(indexOfT, "'")
.toString();

timeStamp = (String) DateUtils.getRelativeTimeSpanString(Long.parseLong(properFormat),
System.currentTimeMillis(),
DateUtils.SECONDS_IN_MILLIS);
}

罪魁祸首是 Long.parseLong(properFormat)。我需要将 properFormat 转换为毫秒。

最佳答案

tl;dr

Instant.parse( "2014-10-23T00:35:14.800Z" )
.toEpochMilli()

java.time 中的一行代码

java.time框架内置于 Java 8 及更高版本中。这些新类取代了与最早版本的 Java(如 java.util.Date/.Calendar) bundle 在一起的旧日期时间类。参见 Tutorial . java.time 类也取代了非常成功的 Joda-Time图书馆,由一些相同的人 build ,包括由相同的人领导 Stephen Colbourne .

Instant是时间轴上的一个时刻 UTC分辨率为 nanoseconds .你可以ask it for a count of milliseconds来自其 epoch (1970 年的第一个时刻,在 UTC 中)。但请记住,Instant 可能有额外的数据,纳秒比毫秒更精细。因此,您可能会在几分之一秒内丢失数据

java.time 类在解析/生成字符串时使用标准的 ISO 8601 格式。无需指定格式化模式。 Instant 类可以 directly parse一个字符串。

Instant.parse( "2014-10-23T00:35:14.800Z" )

您可以通过调用 toEpochMilli

将其转换为自 UTC 1970 年第一时刻以来的毫秒数

注意可能的数据丢失,因为 Instant 类可以保持纳秒级。因此,提取毫秒将在任何小数秒内截断任何微秒或纳秒。您的示例字符串在小数秒中只有三位数字,因此只有毫秒。但是六位或九位小数在转换为毫秒计数时将被截断为三位。

long millisFromEpoch = Instant.parse( "2014-10-23T00:35:14.800Z" ).toEpochMilli();

要以小时-分钟-秒的形式获取耗时,请使用 Duration类(class)。喂它between处理一对时刻。

Duration duration = Duration.between( Instant.parse( "2014-10-23T00:35:14.800Z" ) , Instant.now() );

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

您可以直接与您的数据库交换java.time 对象。使用 JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。

从哪里获得 java.time 类?

Table of which java.time library to use with which version of Java or Android


Joda-Time 中的一行代码

更新:Joda-Time 项目处于维护模式,团队建议迁移到 java.time 类。

随着Joda-Time 2.5库:

long millisSinceEpoch = new DateTime( "2014-10-23T00:35:14.800Z" ).getMillis();

Joda-Time 解析并生成 ISO 8601默认情况下的字符串。 Joda-Time 在 Android 中运行。 java.util.Date/.Calendar 类是出了名的麻烦、困惑和有缺陷。避开它们。

关于java - 如何将ISO8601格式转换成毫秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26519867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com