32

使用 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

如何从时间中删除毫秒?

4

6 回答 6

62

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

我觉得这些答案并没有真正按照预期使用 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    
于 2015-10-07T22:46:26.170 回答
36

减少到分钟:

 localTime.truncatedTo(ChronoUnit.MINUTES);

减少到秒:

localTime.truncatedTo(ChronoUnit.SECONDS);

例子:

import java.time.LocalTime;
import java.time.temporal.ChronoUnit;

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

输出15:07:25

于 2017-06-16T15:42:06.633 回答
11

只需DateTimeFormatter明确创建:

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

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

于 2014-08-27T20:46:32.467 回答
5

在第一行使用它

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
于 2014-08-27T20:47:26.763 回答
2

尝试使用此处定义的模式: //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);
于 2014-08-27T20:42:42.650 回答
-1

您可以简单地通过在字符串上使用正则表达式来做到这一点:

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

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

于 2014-08-27T21:01:14.103 回答