代码之家  ›  专栏  ›  技术社区  ›  donm

将尾部零添加到HH:MM:SS中的时间戳字符串。ssssss格式

  •  0
  • donm  · 技术社区  · 7 年前

    将字符串表示时间戳视为 "2017-06-05T19:27:10.917360" . 但是 若时间戳上方有连续的尾随零,则在上述示例中,上游系统会在几秒钟和几毫秒内截断零 喜欢 "2017-06 05T19:27:00.000000"
    java中是否有可用的格式化程序,可以在特定格式(包括分隔符)中添加尾随零 : 在小时、分钟和秒之间。

    例如: "2017-06-05" 应转换为 "2017-06-05T00:00:00.000000"
    编辑:-可以从任何字段HH、MM、SS中截断零。如果时间戳尾部有一系列的零,它将被截断

    2 回复  |  直到 7 年前
        1
  •  1
  •   Anonymous    7 年前
        DateTimeFormatter desiredFormatter 
                = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSSSS");
        String truncatedDateTimeString = "2017-06-05T19:27";
        LocalDateTime dateTime = LocalDateTime.parse(truncatedDateTimeString);
        String fixedDateTimeString = dateTime.format(desiredFormatter);
        System.out.println(fixedDateTimeString);
    

    这张照片

    2017-06-05T19:27:00.000000

    如果还缺少分钟和小时,我们还需要一些技巧。调查 DateTimeFormatterBuilder 及其 parseDefaulting 方法使用方括号 [] 在格式模式字符串中,围绕可能缺少的部分。我不确定如果时间被截断,字符串会是什么样子 T 也失踪了?

    另一方面,如果字符串 2017-06-05T19:27:10.917360 ,在本例中,只需打印回相同的字符串。

    我也不确定你真正想解决的问题是什么。尾随的零是冗余的,那么它们被截断的问题是什么呢?

    编辑: 下面的方法充实了我所说的内容 DateTimeFormatterBuilder 它的 解析默认值 格式模式字符串中的方法和方括号:

    public static String addTrailingZerosToTimestamp(String timeStamp) {
        DateTimeFormatter truncatedFormatter = new DateTimeFormatterBuilder()
                .appendPattern("uuuu-MM-dd['T'HH[:mm[:ss[.SSSSSS]]]]")
                .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
                .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
                .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
                .parseDefaulting(ChronoField.NANO_OF_SECOND, 0)
                .toFormatter();
        DateTimeFormatter desiredFormatter 
                = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSSSS");
        LocalDateTime dateTime = LocalDateTime.parse(timeStamp, truncatedFormatter);
        return dateTime.format(desiredFormatter);
    }
    

    它与 2017-06-05 , 2017-06-05T19 , 2017-06-05T19:27 , 2017-06-05T19:27:10 2017-06-05T19:27:10.917360 ,但不带 2017-06-05T19:27:10.917 .

        2
  •  0
  •   donm    7 年前

    用于以下代码

    public static String addTrailingZerosToTimestamp(String timeStamp) {
        String param = timeStamp;
        String newCmitTime = "";
        if (param.length() < 26) {
    
            String currentCmitDate = param.substring(0, 10);
            if (param.length() <= 11) {
                param = currentCmitDate + "T" + "00:00:00.000000";
    
            } else {
                String currentCmitTime = param.substring(11, param.length());
    
                String[] timeSplit = currentCmitTime.split("\\:|\\.");
    
                switch (timeSplit.length) {
                    case 4:
                        newCmitTime = currentCmitTime;
                        break;
                    case 3:
                        newCmitTime = currentCmitTime + ".000000";
                        break;
                    case 2:
                        newCmitTime = currentCmitTime + ":00.000000";
                        break;
                    case 1:
                        newCmitTime = currentCmitTime + ":00:00.000000";
                        break;
                    case 0:
                        newCmitTime = currentCmitTime + "00:00:00.000000";
                        break;
                }
                param = currentCmitDate + "T" + newCmitTime;
           }
        } else {
            return param;
        }
        return param;
    }