将字符串表示形式的时间戳视为"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截断零。如果尾部有一系列零的时间戳,它将被截断
答案 0 :(得分:1)
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
。
答案 1 :(得分:0)
在下面的代码中使用
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;
}