9

Java doc では、 DateUtils.ceilingDateUtils.truncateの違いが明確ではありません。Javaドキュメントは間違っていますか? 誰かがこれを明確にできますか?

シーリング

public static 日付上限 (日付 date, int フィールド)

この日付を天井にし、指定されたフィールドを最上位フィールドとして残します。

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

切り捨てる

public static Date truncate(Date date, int フィールド)

この日付を切り捨て、最上位フィールドとして指定されたフィールドを残します。

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

4

3 に答える 3

8

Jim の回答に付け加えると、ceiling メソッドに Javadoc エラーがあるのではないかと思います。Ceiling(Date,int) の説明は3.0 の javadocで更新されました (同じメソッドの2.5 の javadocと比較してください)...そして他のものは更新されていませんが、そのメソッドは Calendar バージョンに共通のコードを使用しています...または、単純なテストケースを使用すると、両方が同じように動作することがわかります(少なくとも3.1の私にとっては:))

@Test
public void testCeil() {
    final Calendar date = new GregorianCalendar();
    date.clear();
    date.set(2002, 3, 28, 13, 45, 01);

    System.out.println(date.getTime());
    System.out.println(DateUtils.ceiling(date, Calendar.HOUR).getTime());
    System.out.println(DateUtils.ceiling(date.getTime(), Calendar.HOUR));
    System.out.println(DateUtils.truncate(date, Calendar.HOUR).getTime());
    System.out.println(DateUtils.truncate(date.getTime(), Calendar.HOUR));
    System.out.println(date.getTime());
}
于 2012-05-14T23:16:12.380 に答える
5

答えはドキュメントにあります:

truncate、ceil()、および round メソッドは、日付の Math.floor()、Math.ceil()、または Math.round バージョンと見なすことができます。このようにして、日付フィールドはボトムアップ順に無視されます。

「あなたは正しいが、理由がある」と私は解釈します。

于 2012-05-14T22:53:28.460 に答える
3

ceil() メソッドの一部の古いバージョンに関するドキュメントは間違っています。ある時点で修正されており、3.1 のドキュメントは次のとおりです。

public static Date ceiling(Date date,
                           int field)
Ceil this date, leaving the field specified as the most significant field.

For example, if you had the datetime of 28 Mar 2002 13:45:01.231, if you passed with HOUR, it would return 28 Mar 2002 14:00:00.000. If this was passed with MONTH, it would return 1 Apr 2002 0:00:00.000.

したがって、ceil() と trunc() は両方とも残りのすべてのフィールドを最小化しますが (場合によっては 0 に設定されますが、MONTH の場合は日が 1 に設定されます)、ceil() は実際に渡されたフィールドを 1 ずつ増やします。一方、 trunc はしません。

于 2012-05-14T23:16:37.867 に答える