繁体   English   中英

如何将纳秒的正常运行时间转换为可读的日期时间格式

[英]How to convert nanoseconds of uptime into a readable date time format

我从android可穿戴设备中提取了加速计数据。 在查看数据时,我意识到时间戳不是unix可转换的。 经过研究,我看到时间戳在正常运行时间实际上是纳秒。 我的问题与Accelerometer SensorEvent时间戳相同。 但是由于我不知道Java,我不知道如何使用提供的解决方案进行转换。 是否有任何python方法可以将正常运行时间内的纳秒转换为可读的日期时间格式? 时间戳的示例是“45900482044637”。

TL;博士

Duration.ofNanos ( 45_900_482_044_637L )

PT12H45M0.482044637S

java.time

Java 8及更高版本为此目的有一个Duration类,作为新java.time框架的一部分(参见教程 )。 这些新类具有纳秒分辨率(小数点后九位小数)。 Duration表示一段时间,以小时,分钟和秒为单位。

Android目前不使用Java 8技术,但有一个java.time到Java 6和7的后端口。ThreeTenABP项目中进一步适应Android。

注意L附加到数字文字很long 此外,下划线使人类更容易破译冗长的数字。

long input = 45_900_482_044_637L;  

让我们将该数字转换为Duration对象。

Duration duration = Duration.ofNanos ( input );

当我们生成该Duration对象的String表示时,我们得到一个使用ISO 8601标准格式化的String。 该标准使用模式PnYnMnDTnHnMnS ,其中P标记开头, T将小时 - 月 - 日与小时 - 分 - 秒分开。

    System.out.println ( "duration: " + duration );

答案是十二小时四十五分钟,还有几分之一秒。

持续时间:PT12H45M0.482044637S


关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧遗留日期时间类,如java.util.DateCalendarSimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程 并搜索Stack Overflow以获取许多示例和解释。 规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。 该项目是未来可能添加到java.time的试验场。 您可以在这里找到一些有用的类,比如IntervalYearWeekYearQuarter ,和更多

要在Python中以人类可读的格式获得正常运行时间:

>>> from datetime import timedelta
>>> ns = 45900482044637
>>> print(timedelta(microseconds=round(ns, -3) // 1000))
12:45:00.482045

使用:

long millis = TimeUnit.MILLISECONDS.convert(nanosecond, TimeUnit.NANOSECONDS);
Date date = new Date(millis );
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd hh:mm aaa");
String dateFormatted = formatter.format(date);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM