如何从java 8中的LocalTime中删除毫秒

时间:2014-08-27 20:38:26

标签: java rounding datetime-format java-time localtime

使用java.time框架,我希望以hh:mm:ss格式打印时间,但LocalTime.now()hh:mm:ss,nnn格式提供时间。我尝试使用DateTimeFormatter

DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_TIME;
LocalTime time = LocalTime.now();
String f = formatter.format(time);
System.out.println(f);

结果:

22:53:51.894

如何从时间中删除毫秒?

6 个答案:

答案 0 :(得分:31)

编辑:我应该补充说这些是纳秒而不是毫秒。

我觉得这些答案并没有真正回答使用Java 8 SE日期和时间API的问题。我相信truncatedTo方法就是这里的解决方案。

LocalDateTime now = LocalDateTime.now();
System.out.println("Pre-Truncate:  " + now);
DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE_TIME;
System.out.println("Post-Truncate: " + now.truncatedTo(ChronoUnit.SECONDS).format(dtf));

输出:

Pre-Truncate:  2015-10-07T16:40:58.349
Post-Truncate: 2015-10-07T16:40:58

或者,如果使用时区:

LocalDateTime now = LocalDateTime.now();
ZonedDateTime zoned = now.atZone(ZoneId.of("America/Denver"));
System.out.println("Pre-Truncate:  " + zoned);
DateTimeFormatter dtf = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
System.out.println("Post-Truncate: " + zoned.truncatedTo(ChronoUnit.SECONDS).format(dtf));

输出:

Pre-Truncate:  2015-10-07T16:38:53.900-06:00[America/Denver]
Post-Truncate: 2015-10-07T16:38:53-06:00    

答案 1 :(得分:15)

缩短到几分钟:

 localTime.truncatedTo(ChronoUnit.MINUTES);

切到秒:

localTime.truncatedTo(ChronoUnit.SECONDS);

示例:

LocalTime.now().truncatedTo(ChronoUnit.SECONDS).format(DateTimeFormatter.ISO_LOCAL_TIME)

输出15:07:25

答案 2 :(得分:9)

明确地创建DateTimeFormatter

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss", Locale.US);
LocalTime time = LocalTime.now();
String f = formatter.format(time);
System.out.println(f);

(我更喜欢明确使用美国语言环境,明确表示我不想想要任何默认格式的语言环境。)

答案 3 :(得分:5)

在第一行中使用此

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");

答案 4 :(得分:1)

尝试使用此处定义的模式:http://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

例如:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd HH. mm. ss");
String text = date.toString(formatter);

答案 5 :(得分:-1)

你可以通过在字符串上使用正则表达式来实现它:

String f = formatter.format(time).replaceAll("\\.[^.]*", "");

这将删除(通过替换为空白)最后一个点以及之后的所有内容。