将微秒时间转换为毫秒时间
Posted
技术标签:
【中文标题】将微秒时间转换为毫秒时间【英文标题】:Converting Microsecond time to Millisecond time 【发布时间】:2017-01-24 16:31:26 【问题描述】:我正在接收来自 GPS 接收器的时间戳,它以秒后的微秒时间表示:
00:12:34.567891
Java 7 及以下版本只使用毫秒时间,所以我可以拆分字符串并将微秒部分解析为毫秒,但这似乎很荒谬。
Java 8 以纳秒精度运行,但如果我使用具有“HH:mm:ss.nnnnnn”模式的 DateTimeFormatter,“.”之后的部分是否会出现?以纳秒为单位考虑?
基本上我如何获取我的微秒时间戳并将其转换为总毫秒数。
【问题讨论】:
Java7 有TimeUnit.NANOSECONDS
... 和 System.nanoTime();
【参考方案1】:
这可以帮助你,从 Java7 开始是默认的
TimeUnit.NANOSECONDS.convert(567891, TimeUnit.MILLISECONDS);
小心地将解析的时间作为参数给出..
【讨论】:
是的,我希望不必拆分时间戳。看起来这应该更容易。 问题似乎是在要求整个时间跨度中的总毫秒数,而不仅仅是在这个答案中看到的一小部分秒。但问题不清楚且措辞不佳。【参考方案2】:tl;博士
Duration.between(
LocalTime.MIN ,
LocalTime.parse( "00:12:34.567891" )
).toMillis()
看到这个code run live at IdeOne.com。
754567
java.time
您的输入不是似乎是 GPS 时间戳。您应该确定并记录对数据源的说明。
“时间戳”一词通常表示时间线上的一个点,即日期加上时间加上时区(或与 UTC 的偏移)。相比之下,您的00:12:34.567891
似乎是一个时间跨度,具体来说是十二分钟三十四秒,大约多半秒(0.567891 秒)。
假设您的输入不会超过 24 小时,我建议解析为 LocalTime
对象。
String input = "00:12:34.567891" ;
LocalTime lt = LocalTime.parse( input );
将时间跨度表示为Duration
。
Duration d = Duration.between( LocalTime.MIN , lt ) ;
生成一个字符串,以standard ISO 8601 格式表示此Duration
的值。在这种PnYnMnDTnHnMnS
格式中,P
标志着开始,T
将任何年-月-日部分与任何小时-分钟-秒部分分开。
PT12M34.567891S
顺便说一句,您的输入字符串值对于序列化时间跨度值的格式选择不佳。尽可能使用标准 ISO 8601 格式。
您似乎要求将整个时间跨度以毫秒为单位。请注意,这意味着数据丢失,因为任何microseconds 或nanoseconds 在几分之一秒内都会被截断为milliseconds。
long millis = d.toMillis() ; // Consider entire span of time as milliseconds.
看到这个code run live at IdeOne.com。
754567
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date
、Calendar
和 SimpleDateFormat
。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?
Java SE 8、Java SE 9 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6 和 Java SE 7 大部分 java.time 功能都在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android ThreeTenABP 项目专门为 android 适配 ThreeTen-Backport(如上所述)。 见How to use ThreeTenABP…。ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval
、YearWeek
、YearQuarter
和more。
【讨论】:
以上是关于将微秒时间转换为毫秒时间的主要内容,如果未能解决你的问题,请参考以下文章
Qt 时间戳从 Epoch(1970) 到 2000 年开始的 Postgresql 时间戳。如何添加偏移量并将毫秒转换为微秒?