Java.util.Date
オブジェクトは日付を2014-01-24 17:33:47.214
として保存しますが、日付の形式は2014-01-24 17:33:47
が必要です。 ミリ秒の部分を削除したい
自分の質問に関連する質問をチェックしました...
私は与えられた答えを試しました
long time = date.getTime();
date.setTime((time / 1000) * 1000);
しかし、結果の日付形式は2014-01-24 17:33:47.0
です。日付形式から0
を削除するにはどうすればよいですか?
基本的な答えは、できません。 Date#toString
によって返される値はDate
オブジェクトの表現であり、toString
メソッドで内部的に使用する以外の形式の概念はありません。
通常、これは表示目的には使用しないでください(まれな場合を除く)
代わりに、ある種の DateFormat
を使用する必要があります
例えば...
Date date = new Date();
System.out.println(date);
System.out.println(DateFormat.getDateTimeInstance().format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(date));
次のようなものを出力します...
Thu Jan 30 16:29:31 EST 2014
30/01/2014 4:29:31 PM
30/01/14 4:29 PM
30/01/2014 4:29:31 PM
30 January 2014 4:29:31 PM
あなたが本当に行き詰まっている場合は、 SimpleDateFormat
を使用してさらにカスタマイズできますが、すべての人が同じ日付/時刻形式を使用しているわけではないので、できればこれを避けます;)
小数秒をロップします。
myJavaUtilDate.toInstant() // Convert from legacy class to modern class. Returns a `Instant` object.
.truncatedTo( ChronoUnit.SECONDS ) // Generate new `Instant` object based on the values of the original, but chopping off the fraction-of-second.
String
を生成するときに、小数秒を非表示にします。
myJavaUtilDate.toInstant() // Convert from legacy class to modern class. Returns a `Instant` object.
.atOffset( ZoneOffset.UTC ) // Return a `OffsetDateTime` object.
.format( DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ). // Ask the `OffsetDateTime` object to generate a `String` with text representing its value, in a format defined in the `DateTimeFormatter` object.
Java.timeクラスに取って代わった、古いレガシーの古い日時クラスを使用しています。
Instant
古いクラスに追加された新しいメソッドを呼び出して、古いJava.util.Date
オブジェクトをJava.time.Instant
に変換します。
Instant instant = myJavaUtilDate.toInstant() ;
データ自体の値を変更して秒の端数を切り捨てたい場合は、切り捨てることができます。 Java.timeクラスは 不変オブジェクト を使用するため、元のオブジェクトを変更(変更)するのではなく、新しいオブジェクトを生成します。
Instant instantTruncated = instant.truncatedTo( ChronoUnit.SECONDS );
切り捨てるのではなく、日付時刻値を表す文字列を生成するときに小数秒の表示を抑制したいだけの場合は、ニーズに合うようにフォーマッタを定義します。
たとえば、「uuuu-MM-dd HH:mm:ss」は小数秒について言及していないため、データに含まれるミリ秒は、生成された文字列には表示されません。
より柔軟な書式設定のために、Instant
をOffsetDateTime
に変換します。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC )
String output = odt.format( f );
あなたの質問はタイムゾーンの問題を無視することに注意してください。 UTCを使用するつもりなら、上記のコードはDate
とInstant
の両方が定義によりUTCにあるので機能します。代わりに、特定の地域の ウォールクロック時間 のレンズを通して特定のデータを認識したい場合は、タイムゾーンを適用します。詳細については、スタックオーバーフローでZoneId
およびZonedDateTime
クラス名を検索してください。
Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは厄介な古い レガシーに取って代わりますJava.util.Date
、 Calendar
、& SimpleDateFormat
などの日時クラス.
Joda-Time プロジェクトは現在 メンテナンスモード であり、 Java.time クラスへの移行を推奨しています。
詳細については、 Oracleチュートリアル を参照してください。スタックオーバーフローで多くの例と説明を検索してください。仕様は JSR 310 です。
Java.timeオブジェクトをデータベースと直接交換できます。 JDBC 4.2 以降に準拠した JDBCドライバー を使用します。文字列も、Java.sql.*
クラスも必要ありません。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明する場です。 Interval
、 YearWeek
、 YearQuarter
、 more などの便利なクラスがここにあります。
SimpleDateFormatter
を使用できます。次のコードをご覧ください。
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
Date now = date.getTime();
System.out.println(formatter.format(now));
ApacheのDateUtilsを使用します。
import org.Apache.commons.lang.time.DateUtils;
...
DateUtils.truncate(new Date(), Calendar.SECOND)
秒に切り捨て(ミリ秒なし)、新しい日付を返します。
public Date truncToSec(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.MILLISECOND, 0);
Date newDate = c.getTime();
return newDate;
}
SimpleDateFormat
クラスを使用して、必要に応じて日付をフォーマットできます。可能な組み合わせの多様性のため、ここにドキュメントのリンクを単に含めます:
http://docs.Oracle.com/javase/7/docs/api/Java/text/SimpleDateFormat.html
コードは次のようになります。
System.out.println(new SimpleDateFormat("MM/dd/yyyy").format(date));
参考までに、 リンクした投稿 で受け入れられた回答は機能します:
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("S");
Date d = new Date();
System.out.println(df.format(d));
Calendar c = Calendar.getInstance();
c.set(Calendar.MILLISECOND, 0);
d.setTime(c.getTimeInMillis());
System.out.println(df.format(d));
}