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

时间:2015-11-25 01:45:01

标签: java android python

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

3 个答案:

答案 0 :(得分:5)

TL;博士

Duration.ofNanos ( 45_900_482_044_637L )
  

PT12H45M0.482044637S

java.time

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

Android目前不使用Java 8技术,但Java 6&是back-port of java.time。 7.在 ThreeTenABP 项目中进一步适应Android。

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

long input = 45_900_482_044_637L;  

让我们将该号码转换为Duration个对象。

Duration duration = Duration.ofNanos ( input );

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

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

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

  

持续时间:PT12H45M0.482044637S

关于 java.time

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

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

使用:

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);