web-dev-qa-db-ja.com

Java 8で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
_

時間からミリ秒を削除するにはどうすればよいですか?

15
Nikolas

DateTimeFormatterを明示的に作成するだけです:

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

(私は明示的に米国のロケールを使用することを好んでいます-私がしないでくださいデフォルトの形式のロケールからの何かを望んでいることを明確にするためです。)

9
Jon Skeet

編集:これらはミリ秒ではなくナノ秒であることを付け加えます。

これらの答えは、Java 8 SE Date and Time 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    
32
demos74dx

数分にカット:

 localTime.truncatedTo(ChronoUnit.MINUTES);

秒にカット:

localTime.truncatedTo(ChronoUnit.SECONDS);

例:

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

出力15:07:25

18
Mike_vin

これを最初の行で使用します

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

ここで定義されているパターンを使用してみてください: 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);
1
dpassy

文字列に正規表現を使用することで簡単にできます。

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

これにより、最後のドットとその後のすべてが(空白に置き換えられて)削除されます。

0
Bohemian