4

java.util.Dateを受け取り、それから時間、分、ミリ秒を削除する関数を書く必要があります。数学のみを使用します (日付フォーマッタ、カレンダー オブジェクトなどはありません)

private Date getJustDateFrom(Date d) {
    //remove hours, minutes, and seconds, then return the date
}

このメソッドの目的は、時間なしでミリ秒値から日付を取得することです。

これが私がこれまでに持っているものです:

private Date getJustDateFrom(Date d) {
    long milliseconds = d.getTime();
    return new Date(milliseconds - (milliseconds%(1000*60*60)));
}

問題は、これで分と秒しか削除されないことです。時間を削除する方法がわかりません。

milliseconds - (milliseconds%(1000*60*60*23))すると、前日の23:00に戻ります。

編集:

別の解決策は次のとおりです。

public static Date getJustDateFrom(Date d) {
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    return c.getTime();
}

このソリューションは、アプリのクライアント側とサーバー側のタイム ゾーンの違いの影響を受けますか?

4

4 に答える 4

13

1 日は 24 時間です。ミリ秒 %(1000*60*60*24) を使用します。

于 2013-10-01T18:14:48.410 に答える
2

あなたの定義では単に不可能です。

ミリ秒のタイムスタンプは、一定の時点から経過したミリ秒を表します (私の記憶が正しければ、1970-01-01 00:00:00.000 UTC)。このタイムスタンプは、変換先のタイムゾーンを指定しないと日付 + 時刻に変換できません。

したがって、一般的にではなく、特定のタイムゾーンに関してタイムスタンプを丸めることしかできません。したがって、 Date.getTime() をいじり、タイムゾーンを考慮しない場合、ハードコードされたタイムゾーンでのみ機能することが保証されます。

カレンダーを使用してください。

于 2013-10-01T18:38:27.350 に答える
1

Apache の commons lang DateUtils ヘルパー ユーティリティ クラスを利用できます。

たとえば、日時が 2002 年 3 月 28 日 13:45:01.231 の場合、Calendar.HOUR を渡すと、2002 年 3 月 28 日 13:00:00.000 が返されます。これが Calendar.MONTH で渡された場合、2002 年 3 月 1 日 0:00:00.000 が返されます。

Date newDate = DateUtils.truncate(new Date(1408338000000L), Calendar.DAY_OF_MONTH);

commons lang jar はhttp://commons.apache.org/proper/commons-lang/でダウンロードできます。

于 2014-08-20T05:30:46.370 に答える