web-dev-qa-db-ja.com

Javaのグレゴリオ暦の日付と比較するために、Javaの日付から年、月、日などを取得したい。これは可能ですか?

JavaのDate型として格納されたJavaのDateオブジェクトがあります。

グレゴリオ暦の作成日もあります。グレゴリオ暦の日付はパラメータを持たないため、今日の日付(および時刻?)のインスタンスです。

Javaの日付を使って、Javaの日付型から年、月、日、時、分、秒を取得し、gregoriancalendarの日付を比較できるようにします。

現時点では、Javaの日付はlongとして格納されており、使用可能な唯一のメソッドは、longをフォーマットされた日付文字列として記述するだけのようです。年、月、日などにアクセスする方法はありますか?

DateクラスのgetYear()getMonth()などのメソッドは非推奨になりました。私はGregorianCalendar日付で私が持っているJava Dateインスタンスを使うためのベストプラクティスが何であるか疑問に思いました。

私の最終目標は、今日の日時から非常に長い時間、数分以内にJavaの日付があることを確認できるように、日付計算を行うことです。

私はまだJavaの初心者で、これに少し困惑しています。

192
daveb

のようなものを使う:

Date date; // your date
// Choose time zone in which you want to interpret your Date
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Paris"));
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
// etc.

注意してください、月は1ではなく0から始まります。

編集 :Java 8以降、 Java.util.Calendar ではなく Java.time.LocalDate を使用することをお勧めします。やり方は この答え を見てください。

487

Java 8以降では、 Date オブジェクトを LocalDate オブジェクトに変換して、年、月、日を簡単に取得できます。

Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int year  = localDate.getYear();
int month = localDate.getMonthValue();
int day   = localDate.getDayOfMonth();

getMonthValue()は1から12までのint値を返すことに注意してください。

59
Ortomala Lokni

あなたはこのようなことをすることができます、それはDateクラスがどのように働くかを説明するでしょう。

String currentDateString = "02/27/2012 17:00:00";
SimpleDateFormat sd = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date currentDate = sd.parse(currentDateString);

String yourDateString = "02/28/2012 15:00:00";
SimpleDateFormat yourDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

Date yourDate = yourDateFormat.parse(yourDateString);

if (yourDate.after(currentDate)) {
    System.out.println("After");
} else if(yourDate.equals(currentDate)) {
    System.out.println("Same");
} else {
    System.out.println("Before");
}
11
javaCity
    Date date = new Date();

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");

    System.out.println("DAY "+simpleDateFormat.format(date).toUpperCase());

    simpleDateFormat = new SimpleDateFormat("MMMM");
    System.out.println("MONTH "+simpleDateFormat.format(date).toUpperCase());

    simpleDateFormat = new SimpleDateFormat("YYYY");
    System.out.println("YEAR "+simpleDateFormat.format(date).toUpperCase());

編集:date = Fri Jun 15 09:20:21 CEST 2018の出力は:

DAY FRIDAY
MONTH JUNE
YEAR 2018
7
Az.MaYo
private boolean isSameDay(Date date1, Date date2) {
    Calendar calendar1 = Calendar.getInstance();
    calendar1.setTime(date1);
    Calendar calendar2 = Calendar.getInstance();
    calendar2.setTime(date2);
    boolean sameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR);
    boolean sameMonth = calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH);
    boolean sameDay = calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
    return (sameDay && sameMonth && sameYear);
}
3
evya

もっと簡単かも

     Date date1 = new Date("31-May-2017");
OR
    Java.sql.Date date1 = new Java.sql.Date((new Date()).getTime());

    SimpleDateFormat formatNowDay = new SimpleDateFormat("dd");
    SimpleDateFormat formatNowMonth = new SimpleDateFormat("MM");
    SimpleDateFormat formatNowYear = new SimpleDateFormat("YYYY");

    String currentDay = formatNowDay.format(date1);
    String currentMonth = formatNowMonth.format(date1);
    String currentYear = formatNowYear.format(date1);
2
Abdur Rahman
@Test
public void testDate() throws ParseException {
    long start = System.currentTimeMillis();
    long round = 100000l;
    for (int i = 0; i < round; i++) {
        StringUtil.getYearMonthDay(new Date());
    }
    long mid = System.currentTimeMillis();
    for (int i = 0; i < round; i++) {
        StringUtil.getYearMonthDay2(new Date());
    }
    long end = System.currentTimeMillis();
    System.out.println(mid - start);
    System.out.println(end - mid);
}

public static Date getYearMonthDay(Date date) throws ParseException {
    SimpleDateFormat f = new SimpleDateFormat("yyyyyMMdd");
    String dateStr = f.format(date);
    return f.parse(dateStr);
}

public static Date getYearMonthDay2(Date date) throws ParseException {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.HOUR_OF_DAY, 0);
    return c.getTime();
}
public static int compare(Date today, Date future, Date past) {
    Date today1 = StringUtil.getYearMonthDay2(today);
    Date future1 = StringUtil.getYearMonthDay2(future);
    Date past1 = StringUtil.getYearMonthDay2(past);
    return today.compare // or today.after or today.before
}

getYearMonthDay2(カレンダーソリューション)は10倍高速です。これで、yyyy MM dd 00 00 00になり、date.compareを使って比較できます。

1
Tiina
    Date queueDate = new SimpleDateFormat("yyyy-MM-dd").parse(inputDtStr);
    Calendar queueDateCal = Calendar.getInstance();
    queueDateCal.setTime(queueDate);
    if(queueDateCal.get(Calendar.DAY_OF_YEAR)==Calendar.getInstance().get(Calendar.DAY_OF_YEAR))
{
    "same day of the year!";
 }
1
rabi