如何将double值格式化为时间

时间:2018-03-04 05:35:56

标签: java time format nmea

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

我的解析器将其视为双重

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?

2 个答案:

答案 0 :(得分:1)

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

打印

  

3点46分58秒

首先解析为double绕道而行,它只是给你更复杂的代码,所以避免这样做。只需解析时间,就像解析任何其他格式的时间一样。以上是否也适用于上午10点以后的小时数为两位数的情况?确实如此。输入:

    String utcTime = "123519.00";

输出:

  

12点35分19秒

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

  1. 使用DateTimeFormatterBuilder指定小数部分(甚至是可选的小数部分),其中包含0到9位小数之间的任何内容。
  2. hack:使用带有正则表达式的String.replaceFirst删除小数部分,然后将其从格式模式字符串中删除。
  3. 它还需要小数点前至少5位数,因此一天中第一个小时的时间需要有前导零,例如00:01:45为00145.00

    由于时间始终为UTC,因此您可能希望使用atOffsetLocalTime转换为OffsetTime ZoneOffset.UTC。如果您也知道日期,则OffsetDateTimeInstant是合适的,但我没有深入研究文档以确定您是否知道日期。

    链接

答案 1 :(得分:0)

NSWorkspaceDidActivateApplicationNotification

然后零填充并在其间添加':#。如果你愿意的话,你也可以截断或舍入到整秒,但是要注意秒数最多可以达到60,在这种情况下你必须将秒数归零,在分钟数上加1,然后如果得到则可以完成60分钟,小时数。