JavaでcompareToメソッドを使用して、特定の日付が別の日付の24時間以上かどうかを確認しています。日付が正確に24時間以上あるかどうかを調べる
どのように日付を比較する整数を決定するのですか?
JavaでcompareToメソッドを使用して、特定の日付が別の日付の24時間以上かどうかを確認しています。日付が正確に24時間以上あるかどうかを調べる
どのように日付を比較する整数を決定するのですか?
で答えはあなたが達成したいことに依存します。
片方向の違いは、ミリ秒単位で確認できます。ミリ秒単位で24時間は(ミリ秒単位で表される)2つの日付の差がある場合は、単に確認することができるようになりました
を(あなたはまた、IMOより説明的であるTimeUnit.HOURS.toMillis(24)
を書くことができ、コード内)
24 * 60 * 60 * 1000 = 86400000
h min sec millis
を経由して計算することができ86400000.
'int'ではなく、' long'算術ですべてを行うことを忘れないでください。 –
ユニットを使用する場合は、ユニットを正しく使用してください。今、あなたが所有しているユニットはt^5にあります。 –
@DaftPunk誤った使い方はどういう意味ですか? '86400000'は' int'の範囲です。また、 'longLength'と' someLong1 - someLong2> someInt'のように 'long'と' int'を比較することで問題はありません。 – Pshemo
Calendar
クラスを使用してください。すでにDate
オブジェクトを持っている場合、あなたはまだCalendar
を使用することができます。
Date aDate = . . .
Calendar today = Calendar.getInstance();
today.setTime(aDate);
Calendar tomorrow = Calendar.getInstance();
tomorrow.setTime(aDate);
tomorrow.add(Calendar.DAY, 1);
Date tomorrowDate = tomorrow.getTime(); // if you need a Date object
あなたはカレンダーを使用し、日付からカレンダーに変換する方法を示しますが、あるカレンダーが他のカレンダーに続いているかどうかを確認するにはどうすればよいですか?未解決のままです。私はカレンダーが今日か前日かをチェックする必要があるので、あなたもそれに答えることができればそれはいいだろう。 –
@YekhezkelYovel - これは簡単です。 'Calendar'は' Comparable'を実装しているので、 'cal1.compareTo(cal2)'を使ってどちらのカレンダーの後ろにあるかを知ることができます。 'cal1'が' cal2'の前の時刻を表し、 'positive'は' cal2'の前の時刻を表します。 –
些細なことでもありませんが、それはあなたがあなたの答えにそれを含めるべきであったので、菅野が言ったことです。 1日前の日付かどうかのチェックについて(比較を除く)この投稿が見つかりましたhttp://stackoverflow.com/questions/2517709/java-comparing-two-dates-to-see-if-they-are-in-同じ日に便利です。 –
日付の間のデルタを見つけるには:具体的には短い、
long endL = end.getTimeInMillis() + end.getTimeZone().getOffset(end.getTimeInMillis());
long startL = this.getTimeInMillis() + this.getTimeZone().getOffset(this.getTimeInMillis());
return (endL - startL)/MILLISECS_PER_DAY;
、
myUtilDate_B
.toInstant()
.equals(
myUtilDate_A.toInstant().plus(24 , ChronoUnit.HOURS)
) // Exactly 24 hours apart.
...と...
myUtilDate_B
.toInstant()
.isAfter(
myUtilDate_A.toInstant().plus(24 , ChronoUnit.HOURS)
) // Over 24 hours apart.
はまた...あなたは、特にどちらかどうか尋ねるために2つの日付・時刻を比較するために頼ま
Duration.between(myUtilDate_A , myUtilDate_B)
.compareTo(Duration.ofHours(24))
// Returns 0 if exactly 24 hours apart,
// >0 if over 24 hours apart.
:
上記のcompareTo
方法はこれを行いません。それは、瞬間が同じか、遅いか、早いかを単に伝えるように設計されています。この方法では、24時間などの特定の時間範囲は考慮されません。
あなたは特に、日付は問題ではないと述べました。だから、夏時間(DST)のような異常を無視して、1日を24時間より長くまたは短くしたいとします。
UTCで作業できます。タイムゾーンは不要です。
java.util.Date
オブジェクトを参照している場合は、まずオブジェクトをjava.timeオブジェクトに変換します。 Date
クラスは、厄介な古い日時クラスの一部で、Calendar
と一緒になっています。これは、現在はレガシーで、java.timeクラスに取って代わられています。
java.util.Date
に相当するのはjava.time.Instant
です。 Instant
クラスは、nanoseconds(小数点以下9桁まで)の解像度を持つUTCのタイムライン上の瞬間を表します。
古いクラスに追加された新しいメソッドを使用して、java.time型に/からjava.time型に変換できます。
Instant start = myUtilDate_Start.toInstant();
Instant stop = myUtilDate_Stop.toInstant();
Duration
オブジェクトとして、この場合は24時間、我々は気にギャップを定義します。
Duration d = Duration.ofHours(24); // We mean literally 24 hours, not a day.
Duration
を使用して、24時間後の値を計算します。時間単位はChronoUnit
enumで定義します。
Instant target = start.plus(24 , ChronoUnit.HOURS);
最後に、2番目の日時の値を比較します。 equals
とisAfter
に電話してください。
Boolean isExactly24HoursLater = stop.equals(target);
Boolean isOver24HoursLater = stop.isAfter(target);
java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.Date
、Calendar
、& SimpleDateFormat
など、面倒な古いlegacy日時クラスに取って代わります。
にあるJoda-Timeプロジェクトは、java.timeへの移行を推奨しています。
詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。
ここで、java.timeクラスを取得するには?
ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、Interval
、YearWeek
、YearQuarter
、moreなどの便利なクラスがあります。
UPDATE:Joda-Timeプロジェクト、今maintenance modeで、java.timeクラスへの移行をアドバイスします。このセクションは、歴史のためにここに残されています。
Joda-Timeは、この作業を容易にします。
DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris");
DateTime dateTimeInQuestion = new DateTime(2014, 1, 2, 3, 4, 5, 6, timeZone); // Or: new DateTime(someJavaDotUtilDotDateObject);
DateTime now = new DateTime(timeZone);
DateTime twentyFourHoursFromNow = now.plusHours(24); // Ignores Daylight Saving Time (DST). If you want to adjust for that, call: plusDays(1) instead.
DateTime isDateTimeInQuestionAfter24HoursFromNow = dateTime.isAfter(twentyFourHoursFromNow);
plusHours(24)
ではなくplusDays(1)
を呼び出すことを意図した場合。 Joda-Timeは夏時間(DST)やその他の異常を調整します。たとえば、米国では、1時間のDSTの愚かさのために、24時間ではなく25時間を意味する可能性があります。
内での比較します:間隔、期間、および期間。
Interval interval = new Interval(now, twentyFourHoursFromNow);
boolean isDateTimeInQuestionContainedWithinNext24Hours = interval.contains(dateTimeInQuestion);
このような比較のため、Joda-Timeは「Half-Open」ロジックを使用しています。つまり、開始日時は()ですが、末尾は()です。言い換えれば、より大きいまたは等しい(> =)開始を比較するが、より短い(<)終了を比較する。このアプローチは通常、日時で作業するときに最も効果的です。
これは、あなたが明確にすることができ、あなたの日付が昨日だった場合
public static final long ONE_MINUTE = 60 * 1000;
public static final long ONE_HOUR = 60 * ONE_MINUTE;
public static final long ONE_DAY = 24 * ONE_HOUR;
public static boolean isYesterday(Date d) {
return DateUtils.isToday(d.getTime() + ONE_DAY);
}
//Get current date - yymmdd increases only
SimpleDateFormat formatter = new SimpleDateFormat("yyMMdd");
Date now = new Date();
int nowTime= Integer.parseInt(formatter.format(now));
//Get last login date - stored in db
int lastLogin= dbManager.getLastLoginDate();
//Check if next day
if(nowTime> lastLogin){
//Do your stuff
//Update last login date
dbManager.saveLoginDate(nowTime);
}
をチェックするのに役立ちますか?あなたは24時間、1カレンダー日を意味しますか、それとも「隣接する24時間セグメント」を意味しますか? – cheeken
私はそれが翌日であるかどうかをチェックしたくないので、正確に24時間後かそれ以上であるかどうかチェックしたいと思います。 –
GregorianCalendarクラスについてどう思いますか? – 11684