0

に丸めるなど、java.util.Dateオブジェクトを 1 日の終わりに丸め2016-04-21T10:28:18.109Zたい2016-04-22T00:00:00.000Z

Java Date roundingを見ましたが、一日の終わりに比較できるものを見つけることができませんでした。また、今日の午前 0 時と明日の午前 0 時の Java Date オブジェクトを作成する方法と同じではありませんか? Date、新しいもの (今日または明日の午前 0 時) を作成するのではなく、特定の日付に基づいて次の午前 0 時を作成したいためです。

4

3 に答える 3

1

のドキュメントを考えると、DateUtilsこれでそれを信頼できるかどうかはわかりません。

UTC 日のみに関心があると仮定すると、Unix エポックが日付境界上にあるという事実を利用できます。

public static Date roundUpUtcDate(Date date) {
    long millisPerDay = TimeUnit.DAYS.toMillis(1);
    long inputMillis = date.getTime();
    long daysRoundedUp = (inputMillis + (millisPerDay - 1)) / millisPerDay;
    return new Date(daysRoundedUp * millisPerDay);
}

可能であれば、 APIに移行することを強くお勧めしますjava.time

于 2016-04-21T10:55:42.713 に答える
0

伝統的な方法

@Test
public void testDateRound() throws ParseException {
    Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").parse("2016-04-21T10:28:18.109Z");
    System.out.println(date);
    Calendar cl = Calendar.getInstance();
    cl.setTime(date);
    cl.set(Calendar.HOUR_OF_DAY, 23);
    cl.set(Calendar.MINUTE, 59);
    cl.set(Calendar.SECOND, 59);
    cl.set(Calendar.MILLISECOND, 999);
    System.out.println(cl.getTime());
    cl.add(Calendar.MILLISECOND, 1);
    System.out.println(cl.getTime());
}

出力

Thu Apr 21 10:28:18 GMT+03:00 2016
Thu Apr 21 23:59:59 GMT+03:00 2016
Fri Apr 22 00:00:00 GMT+03:00 2016
于 2016-04-21T11:01:37.843 に答える