我从android可穿戴设备中提取了加速计数据。在查看数据时,我意识到时间戳不是unix可转换的。经过研究,我看到时间戳在正常运行时间实际上是纳秒。我的问题与Accelerometer SensorEvent timestamp相同。但是由于我不知道Java,我不知道如何使用提供的解决方案进行转换。是否有任何python方法可以将正常运行时间内的纳秒转换为可读的日期时间格式?时间戳的一个例子是" 45900482044637"。
答案 0 :(得分:5)
Duration.ofNanos ( 45_900_482_044_637L )
PT12H45M0.482044637S
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。该标准使用模式PnYnMnDTnHnMnS
,P
标记开头,T
将小时 - 月 - 天与小时 - 分 - 秒分开。
System.out.println ( "duration: " + duration );
答案是十二小时,四十五分钟,几分之一秒。
持续时间:PT12H45M0.482044637S
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 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);