假设字符串表示时间戳为"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。如果尾部有一系列的零作为时间戳,它就会被截断。
发布于 2018-01-28 09:41:24
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方法和方括号的看法:
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。
发布于 2018-02-08 22:31:07
用于以下代码
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;
}https://stackoverflow.com/questions/48409648
复制相似问题