表示用にjava.sqlタイムスタンプをフォーマットする方法


103

java.sqlタイムスタンプを自分の好みに合わせて作成するにはどうすればよいですか?(文字列に、表示目的で)

回答:


160

java.sql.Timestamp伸びjava.util.Dateます。できるよ:

String s = new SimpleDateFormat("MM/dd/yyyy").format(myTimestamp);

または時間も含めるには:

String s = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(myTimestamp);

3
これは機能しますが、SimpleDateFormatはスレッドセーフではないので注意してください。
ブライアンアグニュー

17
SimpleDateFormatオブジェクトがローカルスコープオブジェクト(メソッド内でのみ作成および使用される)の場合、それが存在するスタックは本質的に「スレッドセーフ」であるため、それはスレッドセーフであることに注意してください。シングルスレッドに属します)。
量子

5
時間を含めるには、SimpleDateFormat( "MM / dd / yyyy hh:mm")または同様のものを使用する必要があります
AverageMarcus

1
それを必要とする人のために完全にするために、String S = new SimpleDateFormat( "MM / dd / yyyy HH:mm:ss")。format(myTimestamp);
Ishan Liyanage 2013年

27

String.format(またはjava.util.Formatter)を使用します。

Timestamp timestamp = ...
String.format("%1$TD %1$TT", timestamp)

EDIT:
何TDとTTの手段を知っているフォーマッタのドキュメントを参照してくださいにクリックしてくださいjava.util.Formatter

最初の「T」は次の意味です。

't', 'T'    date/time   Prefix for date and time conversion characters.

そしてその「T」に続く文字:

'T'     Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'D'     Date formatted as "%tm/%td/%ty". 

1
私によると、これが最良の答えです。タイムスタンプを文字列に変換するだけの余分なオブジェクトは作成されません。
サリル2013年

1
ドキュメントを見つけると、それが何を意味するのか場所を今では明確にする必要があり
user85421

とてもエレガントです。明確にするために、ここの例で生成されるフォーマットはのようになり05/30/17 00:39:18ます。
Noumenon 2017年

@Noumenonありがとう、質問が要求したとおり、それは「私の好みに応じた」形式でした[:-)
user85421

10

この特定の質問については、標準的な動作の提案ですjava.text.SimpleDateFormatが、SimpleDateFormat スレッドセーフはないという残念な副作用があり、マルチスレッドシナリオで出力が破損するため、特に厄介な問題の原因となる可能性があります。例外があります!

このようなことについては、Jodaを調べることを強くお勧めします。どうして ?これは、現在のライブラリよりもはるかにリッチで直感的なJavaの時刻/日付ライブラリです(そして今後予定されている新しい標準Java日付/時刻ライブラリの基礎となるため、すぐに標準になる予定です。 API)。


8
良い警告です。ただし、対処は非常に簡単です。SimpleDateFormatインスタンスをセッションスコープ/インスタンス変数/静的コンテキストに格納し、複数のスレッドからアクセスして共有しないでください。メソッド内に新しいSimpleDateFormat()を作成し、使用後に破棄するだけです。それはスレッドセーフです。
グレンベスト

もちろん、本当にSimpleDateFormatインスタンスを保存/共有したい場合は、アクセスを同期します。
グレンベスト



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.