6

指定された許容誤差を持つ2つのオブジェクトJodaTimeを比較するための標準APIはありますか?できれば標準のAPIDateTimeを使用してワンライナーを探しています。この投稿Jodaのような時間的表現ではありません。

理想的には、次のようになります。

boolean areNearlyEqual = SomeJodaAPIClass.equal(dt1, dt2, maxTolerance);

ありがとう!

4

2 に答える 2

8

これを使って:

new Duration(dt1, dt2).isShorterThan(Duration.millis(maxTolerance))
于 2012-07-01T12:27:05.273 に答える
5

この投稿は古いですが、受け入れられたソリューションの行が少し長いことがわかりました。存在するものにこれ以上のものはありませんでした。だから私は Date と DateTime のためにそれをラップする小さなクラスを作りました:

public class DateTimeUtils
{
    public static boolean dateIsCloseToNow(Date dateToCheck,
                                           Duration tolerance)
    {
        return dateIsCloseToNow(new DateTime(dateToCheck), tolerance);
    } 

    public static boolean dateIsCloseToNow(DateTime dateToCheck,
                                           Duration tolerance)
    {
        return datesAreClose(dateToCheck, DateTime.now(), tolerance);
    }

    public static boolean datesAreClose(Date date1,
                                        Date date2,
                                         Duration tolerance)
    {
        return datesAreClose(new DateTime(date1), new DateTime(date2), tolerance);
    }

    public static boolean datesAreClose(DateTime date1,
                                         DateTime date2,
                                         Duration tolerance)
    {
        if (date1.isBefore(date2)) {
            return new Duration(date1, date2).isShorterThan(tolerance);
        }
        return new Duration(date2, date1).isShorterThan(tolerance);
    }

だからこの行:

new Duration(date.getTime(), System.currentTimeMillis()).isShorterThan(Duration.standardSeconds(5)

になります:

DateUtils.dateIsCloseToNow(date, Duration.standardSeconds(5))

作成日を検証する必要がある単体テスト ケースでは、これが非常に役立つことがわかりました。

于 2016-05-11T16:40:29.843 に答える