gpt4 book ai didi

java - 如何将 double 值格式化为时间

转载 作者:行者123 更新时间:2023-12-02 11:33:47 31 4
gpt4 key购买 nike

我正在开发一个读取 GPS 数据的程序。NMEA 字符串返回如下时间:34658.00。

我的解析器将其视为 double

InputLine = "\\$GPGGA,34658.00,5106.9792434234,N,11402.3003,W,2,09,1.0,1048.47,M,-16.27,M,08,AAAA*60";
//NMEA string
//inputLine=input.readLine();
if(inputLine.contains("$GPGGA")) {
String gpsgga = inputLine.replace("\\", "");
String[] gga = gpsgga.split(",");

String utc_time = gga[1];



if (!gga[1].isEmpty()) {
Double satTime = Double.parseDouble(utc_time);
gpsData.setgpsTime(satTime);
}

如何将 34658.00 格式化为 03:46:58?

最佳答案

    DateTimeFormatter nmeaTimeFormatter = DateTimeFormatter.ofPattern("Hmmss.SS");
String utcTime = "34658.00";
System.out.println(LocalTime.parse(utcTime, nmeaTimeFormatter));

这会打印

03:46:58

首先解析为 double 是一种绕道,它只会给你带来比必要的更复杂的代码,所以要避免这种情况。只需像解析任何其他格式的时间一样解析时间即可。上述方法是否也适用于上午 10 点之后的时间(小时数为两位数)?确实如此。输入:

    String utcTime = "123519.00";

输出:

12:35:19

不过,它确实需要两位小数(如果它们非零,则会将它们渲染回来)。如果小数位数可能不同,至少有两种选择

  1. 使用 DateTimeFormatterBuilder 指定小数部分(甚至是可选的小数部分),其中小数部分为 0 到 9 位小数。
  2. 技巧:使用 String.replaceFirst 和正则表达式来删除小数部分,然后将其从格式模式字符串中删除。

它还要求小数点前至少有 5 位数字,因此一天中第一个小时的时间需要有前导零,例如 00145.00 表示 00:01:45。

由于时间始终采用 UTC 格式,因此您可能需要使用 atOffsetLocalTime 转换为带有 ZoneOffset 的 OffsetTime .UTC。如果您也知道日期,则 OffsetDateTimeInstant 会比较合适,但我还没有深入研究文档来确定您是否知道日期。

链接

关于java - 如何将 double 值格式化为时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49092348/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com