我收到了一个GPS接收机的时间戳,它在几秒钟后以微秒表示:
00:12:34.567891Java 7及以下版本只使用毫秒时间,所以我可以拆分字符串并将微秒部分解析为毫秒,但这似乎很荒谬。
Java 8的操作精度为纳秒级,但是如果我使用的是模式为“DateTimeFormatter”的HH:mm:ss.nnnnnn,那么后面的部分会是“。从纳秒的角度考虑?
本质上,我如何拿出我的微秒时间戳,并将它转换成毫秒的总数。
发布于 2017-01-24 16:35:37
这可以帮助您,在默认情况下,因为Java7
TimeUnit.NANOSECONDS.convert(567891, TimeUnit.MILLISECONDS);仔细给出所分析的时间作为参数。
发布于 2018-01-09 05:12:48
tl;dr
Duration.between(
LocalTime.MIN ,
LocalTime.parse( "00:12:34.567891" )
).toMillis()754567
java.time
您的输入似乎不是GPS时间戳。您应该确定并记录对数据源的解释。
“时间戳”一词通常是指时间轴上的一个点,一个日期加一天的时间加时区(或与UTC相抵)。相反,您的00:12:34.567891似乎是一段时间,特别是12分钟、34秒和大约半秒(0.567891秒)。
假设输入长度不超过24小时,我建议解析为LocalTime对象。
String input = "00:12:34.567891" ;
LocalTime lt = LocalTime.parse( input );将时间跨度表示为Duration。
Duration d = Duration.between( LocalTime.MIN , lt ) ;生成一个字符串,以标准ISO 8601格式表示此标准ISO 8601的值。在这种格式的PnYnMnDTnHnMnS中,P标志着开始,T将任意年份-月-天部分与任何小时-分钟-秒部分分隔开来。
PT12M34.567891S顺便说一下,对于序列化时间跨度值来说,输入字符串值是一个糟糕的格式选择。尽可能使用标准ISO 8601格式。
作为毫秒的计算,您似乎要求这整个时间跨度。请注意,这意味着数据丢失,因为任何微秒或纳秒在一秒钟的分数被截断为毫秒。
long millis = d.toMillis() ; // Consider entire span of time as milliseconds.754567
关于java.time
java.time框架内置到Java8和更高版本中。这些类取代了麻烦的旧遗赠日期时间类,如java.util.Date、Calendar和SimpleDateFormat。
尤达-时间项目现在在维护模式中,建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310。
在哪里获得java.time类?
三次-额外项目使用其他类扩展java.time。这个项目是将来可能加入java.time的试验场。您可以在这里找到一些有用的类,如Interval、YearWeek、YearQuarter和更多。
https://stackoverflow.com/questions/41833428
复制相似问题