web-dev-qa-db-ja.com

今日の日付で日付を確認する

開始日と終了日の2つの日付を確認するコードをいくつか作成しました。終了日が開始日より前の場合、終了日が開始日より前であることを示すプロンプトが表示されます。

また、開始日が今日(ユーザーがアプリケーションを使用する日)の前かどうかのチェックを追加したいのですが、どうすればよいですか? (以下の日付チェッカーコード、これもすべてAndroidベアリングがある場合)のために記述されています)

if (startYear > endYear) {
    fill = fill + 1;
    message = message + "End Date is Before Start Date" + "\n";
} else if (startMonth > endMonth && startYear >= endYear) {
    fill = fill + 1;
    message = message + "End Date is Before Start Date" + "\n";
} else if (startDay > endDay && startMonth >= endMonth && startYear >= endYear) {
    fill = fill + 1;
    message = message + "End Date is Before Start Date" + "\n";
}
29
Zaask

これは役立ちますか?

Calendar c = Calendar.getInstance();

// set the calendar to start of today
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);

// and get that as a Date
Date today = c.getTime();

// or as a timestamp in milliseconds
long todayInMillis = c.getTimeInMillis();

// user-specified date which you are testing
// let's say the components come from a form or something
int year = 2011;
int month = 5;
int dayOfMonth = 20;

// reuse the calendar to set user specified date
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, dayOfMonth);

// and get that as a Date
Date dateSpecified = c.getTime();

// test your condition
if (dateSpecified.before(today)) {
  System.err.println("Date specified [" + dateSpecified + "] is before today [" + today + "]");
} else {
  System.err.println("Date specified [" + dateSpecified + "] is NOT before today [" + today + "]");
}
43
sudocode

それほど複雑にしないでください。この簡単な方法を使用してください。 DateUtils Javaクラスをインポートし、ブール値を返す以下のメソッドを呼び出します。

DateUtils.isSameDay(date1,date2);
DateUtils.isSameDay(calender1,calender2);
DateUtils.isToday(date1);

詳細については、この記事を参照してください DateUtils Java

114
Kishath

Androidには既にこの専用のクラスがあります。チェック DateUtils.isToday(long when)

8
makata

他の回答では、 time zone の重要な問題を無視しています。

他の答えは時代遅れのクラスを使用します。

古い日時クラスを避ける

最も古いバージョンのJavaにバンドルされている日付時刻クラスは、設計が不十分で、混乱し、面倒です。Java.util.Date/ .Calendarおよび関連クラスを避けてください。

Java.time

LocalDate

日付のみの値で、時刻とタイムゾーンがない場合は、 LocalDate クラスを使用します。

LocalDate start = LocalDate.of( 2016 , 1 , 1 );
LocalDate stop = start.plusWeeks( 1 );

タイムゾーン

LocalDatestoreタイムゾーンではありませんが、決定「今日」などの日付にはタイムゾーンが必要です。どのような場合でも、日付はタイムゾーンによって世界中で異なる場合があります。たとえば、パリではモントリオールよりも早く新しい日が始まります。パリの真夜中の後も、モントリオールではまだ「昨日」です。

持っているのが offset-from-UTC だけである場合は、 ZoneOffset を使用します。フルタイムゾーン(大陸/地域)がある場合は、 ZoneId を使用します。 UTCが必要な場合は、便利な定数 ZoneOffset.UTC を使用します。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );

isEqualisBefore、およびisAfterメソッドを使用すると、比較が簡単になります。

boolean invalidInterval = stop.isBefore( start );

今日がこの日付範囲に含まれているかどうかを確認できます。ここに示すロジックでは、Half-Openアプローチを使用します。ここで、開始は包括的で、終了は排他的です。このアプローチは、日時作業では一般的です。そのため、たとえば、1週間は月曜日から次の月曜日までは実行されません。

// Is today equal or after start (not before) AND today is before stop.
boolean intervalContainsToday = ( ! today.isBefore( start ) ) && today.isBefore( stop ) ) ;

Interval

そのような期間で広範囲に作業する場合は、プロジェクトに ThreeTen-Extra ライブラリを追加することを検討してください。このライブラリは、Java.timeフレームワークを拡張し、Java.timeへの追加の可能性を証明する場所です。

ThreeTen-Extraには、Intervalabutscontainsenclosesなどの便利なメソッドを持つ overlaps クラスが含まれています。


Java.timeについて

Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、面倒な古い legacy のような日時クラスに取って代わります Java.util.DateCalendar 、& SimpleDateFormat

Joda-Time プロジェクトは、現在 メンテナンスモード であり、 Java.time クラスへの移行を推奨しています。

詳細については、 Oracle Tutorial を参照してください。また、Stack Overflowで多くの例と説明を検索してください。仕様は JSR 31 です。

Java.timeオブジェクトをデータベースと直接交換できます。 JDBC 4.2 以降に準拠する JDBCドライバー を使用します。文字列も、Java.sql.*クラスも必要ありません。

Java.timeクラスはどこで入手できますか?

5
Basil Bourque
public static boolean isToday(Date date){
    Calendar today = Calendar.getInstance();
    Calendar specifiedDate  = Calendar.getInstance();
    specifiedDate.setTime(date);

    return today.get(Calendar.DAY_OF_MONTH) == specifiedDate.get(Calendar.DAY_OF_MONTH)
            &&  today.get(Calendar.MONTH) == specifiedDate.get(Calendar.MONTH)
            &&  today.get(Calendar.YEAR) == specifiedDate.get(Calendar.YEAR);
}
5

Joda Time を使用すると、次のように簡略化できます。

DateMidnight startDate = new DateMidnight(startYear, startMonth, startDay);
if (startDate.isBeforeNow())
{
    // startDate is before now
    // do something...
}
5
martin

日付が今日の日付であるかどうかを確認するには、日付が時刻に含まれていないかどうかだけでなく、時刻00:00:00を作成して以下のコードを使用します

    Calendar c = Calendar.getInstance();

    // set the calendar to start of today
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);

    Date today = c.getTime();

    // or as a timestamp in milliseconds
    long todayInMillis = c.getTimeInMillis();


    int dayOfMonth = 24;
    int month = 4;
    int year =2013;

    // reuse the calendar to set user specified date
    c.set(Calendar.YEAR, year);
    c.set(Calendar.MONTH, month - 1);
    c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    // and get that as a Date
    Date dateSpecified = c.getTime();

    // test your condition
    if (dateSpecified.before(today)) {

        Log.v(" date is previou")
    } else if (dateSpecified.equal(today)) {

        Log.v(" date is today ")
    } 
             else if (dateSpecified.after(today)) {

        Log.v(" date is future date ")
    } 

それが役立つことを願っています...

4
Milan Shukla
    boolean isBeforeToday(Date d) {
        Date today = new Date();
        today.setHours(0);
        today.setMinutes(0);
        today.setSeconds(0);
        return d.before(today);
    }
2

この操作を行う別の方法:

public class TimeUtils {

    /**
     * @param timestamp
     * @return
     */
    public static boolean isToday(long timestamp) {
        Calendar now = Calendar.getInstance();
        Calendar timeToCheck = Calendar.getInstance();
        timeToCheck.setTimeInMillis(timestamp);
        return (now.get(Calendar.YEAR) == timeToCheck.get(Calendar.YEAR)
                && now.get(Calendar.DAY_OF_YEAR) == timeToCheck.get(Calendar.DAY_OF_YEAR));
    }

}
1
carlol

年、月、日を表すために整数を使用していると思いますか?一貫性を保ちたい場合は、Dateメソッドを使用します。

Calendar cal = new Calendar();
int currentYear, currentMonth, currentDay; 
currentYear = cal.get(Calendar.YEAR); 
currentMonth = cal.get(Calendar.MONTH); 
currentDay = cal.get(Calendar.DAY_OF_WEEK);

     if(startYear < currentYear)
                {
                    message = message + "Start Date is Before Today" + "\n";
                }
            else if(startMonth < currentMonth && startYear <= currentYear)
                    {
                        message = message + "Start Date is Before Today" + "\n";
                    }
            else if(startDay < currentDay && startMonth <= currentMonth && startYear <= currentYear)
                        {
                            message = message + "Start Date is Before Today" + "\n";
                        }
1
Mitch Salopek

これを試して:

public static boolean isToday(Date date)
{
    return org.Apache.commons.lang3.time.DateUtils.isSameDay(Calendar.getInstance().getTime(),date);
}
0
Spektakulatius
public static boolean itIsToday(long date){
    boolean result = false;
    try{
        Calendar calendarData = Calendar.getInstance();
        calendarData.setTimeInMillis(date);
        calendarData.set(Calendar.HOUR_OF_DAY, 0);
        calendarData.set(Calendar.MINUTE, 0);
        calendarData.set(Calendar.SECOND, 0);
        calendarData.set(Calendar.MILLISECOND, 0);

        Calendar calendarToday = Calendar.getInstance();
        calendarToday.setTimeInMillis(System.currentTimeMillis());
        calendarToday.set(Calendar.HOUR_OF_DAY, 0);
        calendarToday.set(Calendar.MINUTE, 0);
        calendarToday.set(Calendar.SECOND, 0);
        calendarToday.set(Calendar.MILLISECOND, 0);

        if(calendarToday.getTimeInMillis() == calendarData.getTimeInMillis()) {
            result = true;
        }
    }catch (Exception exception){
        Log.e(TAG, exception);
    }
    return result;
}