首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以HH:MM:SS.ssssss格式向时间戳字符串添加尾随零

以HH:MM:SS.ssssss格式向时间戳字符串添加尾随零
EN

Stack Overflow用户
提问于 2018-01-23 19:45:52
回答 2查看 6.9K关注 0票数 0

假设字符串表示时间戳为"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。如果尾部有一系列的零作为时间戳,它就会被截断。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-28 09:41:24

代码语言:javascript
复制
    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、其parseDefaulting方法和方括号的看法:

代码语言:javascript
复制
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-052017-06-05T192017-06-05T19:272017-06-05T19:27:102017-06-05T19:27:10.917360,但不适用于2017-06-05T19:27:10.917

票数 1
EN

Stack Overflow用户

发布于 2018-02-08 22:31:07

用于以下代码

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48409648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档