- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑到 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
转换为毫秒。
最佳答案
Instant.parse( "2014-10-23T00:35:14.800Z" )
.toEpochMilli()
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
注意可能的数据丢失,因为 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 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 类?
更新: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/
我想知道是否可以通过 ISO 8583 做一个完整的声明(在一个日期范围之间),我看到 ATM 可以做完整的声明并且想知道他们使用什么方法。我知道余额查询和迷你报表可以在超过 8583 的 POS 设
我一直在尝试通过 7zip 和 WinRar 提取 ISO 镜像。 这是我使用的命令行: 7z x -y "%Isocontents%\ISO.iso" -o%Newfolder% WinRar.ex
我正在将 ICU 集成到一些内部软件中。我希望能够获取诸如“en_US”之类的字符串并为其获取脚本名称“Latin”。 (虽然最终我实际上想要一个 ICU ScriptCode。) 我尝试使用 ICU
我的数据位于一个数据框中,其结构如下: df2 <- data.frame(Year = c("2007"), Week = c(1:12), Measurement = c(rnorm(12, me
我需要计算一周分配到的年份。例如,2003 年 12 月 29 日被指定为 2004 年的第一周(我认为这仅适用于欧洲)。您可以使用以下代码来查看: SELECT DATEPART(isowk, '2
我想做什么? 我想提取 ISO 文件并编辑其中的文件,然后将其重新打包回 ISO 文件。 (正如你已经读过的) 我为什么要这样做? 我想开始修改 PSP ISO,为此我必须使用游戏资源、 Assets
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
我有一个文件。在 Python 中,我想占用它的创建时间,并将其转换为 ISO time (ISO 8601) string 同时保留它是在 Eastern Time Zone 中创建的事实。 (美国
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我在二维网格上有两个标量场。我想为第一个标量场绘制一条等值线,并根据第二个标量场设置其不透明度。 我从 this SO answer 开始尝试使用 mayavi但我无法从 3D 切换到 2D。 下面是
假设您声明两个同构 showing :: (Read a, Show a) => Iso' String a showing = iso read show reading :: (Read a, S
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines准则。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,
假设有一个两个字符的String,它应该代表ISO 639国家或语言名称。 你知道,Locale类有两个函数 getISOLanguages和 getISOCountries分别返回包含所有 ISO
实体中的值是否可以自由嵌入到 ISO 10303-21 格式的文件中? 在我看到的所有由 CAD 程序生成的示例中,length_measure 都嵌入在uncertainty_measure_wit
是否可以从原始 ISO 自动创建用于操作系统安装的 Vagrant .box 文件? 对我来说,Vagrant 提供的虚拟机上操作系统安装和配置的端到端自动化存在巨大差距。 当然,VagrantBox
有没有办法实现这样的格式: 2003-09-25T14:00:00.000+1000 or 2003-09-25T14:00:00.000+1100 要这样转换 2003-09-25T14:00:00
我正在使用: @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @JsonFormat( pattern = "MM-dd-yyyy" ) private
我需要将 iso-3166-1/iso-3166-2 代码转换为经度/纬度 例子: 输入:“美国”,输出:(37.09024, -95.71289100000001)。 输入“VE-O”,输出:(10
我想转换 POSIX 语言环境名称,例如 en_US、de_DEISO-639-1 和 ISO-3166 代码到 Windows English_United States、German_German
我在 MS Access 上有一个数据库,我通过调用 PDO 和 odbc 驱动程序将其与 PHP 一起使用。我的数据库中有法语、丹麦语和波兰语单词。法语和丹麦语没问题,但波兰语字符没办法,我只得到“
我是一名优秀的程序员,十分优秀!