web-dev-qa-db-ja.com

Java:日付から月の整数を取得する

Dateオブジェクトから月を整数として取得するにはどうすればよいですか(Java.util.Date)。

141
Muhd

Java.time(Java 8)

Java 8では Java.timeパッケージ を使って変換することもできます Java.util.Date オブジェクトを Java.time.LocalDate オブジェクトに変更してから、 getMonthValue() メソッドを使用する。

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

0から11の値を与えるadarshrの答えでは、月の値はcal.get(Calendar.MONTH)とは反対に1から12で与えられていることに注意してください。

しかしBasil Bourqueがコメントで述べたように、好ましい方法は Month enumオブジェクトを LocalDate::getMonth メソッド.

40
Ortomala Lokni
Java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
269
adarshr

Java 8 date apiを使用すると、1行で直接入手できます。

LocalDate today = LocalDate.now();
int month = today.getMonthValue();
13
Ketan Chitale

ジョダタイム

あるいは、 Joda-TimeDateTime クラスを使います。

//convert date to datetime
DateTime datetime = new DateTime(date);
int month = Integer.parseInt(datetime.toString("MM"))

…または…

int month = dateTime.getMonthOfYear();
7
ssoward

tl; dr

myUtilDate.toInstant()                          // Convert from legacy class to modern. `Instant` is a point on the timeline in UTC.
          .atZone(                              // Adjust from UTC to a particular time zone to determine date. Renders a `ZonedDateTime` object. 
              ZoneId.of( "America/Montreal" )   // Better to specify desired/expected zone explicitly than rely implicitly on the JVM’s current default time zone.
          )                                     // Returns a `ZonedDateTime` object.
          .getMonthValue()                      // Extract a month number. Returns a `int` number.

Java.time詳細

The Answer Ortomala Lokniによる Java.time は正しいです。そして、あなたは should を使うべきです。これは、古いJava.util.Date/.Calendarクラスを大幅に改善したものです。 Java.timeの Oracle Tutorial を参照してください。

新しいコードから始めるときのために、Java.util.Dateに関係なく、Java.timeの使い方を示すコードを追加します。

一言で言えばJava.timeの使用… Instant はUTCのタイムライン上の瞬間です。タイムゾーン( ZoneId )を適用して ZonedDateTime を取得します。

Month クラスは月を一般的に表すための洗練された enum です。この列挙型には、ローカライズされた名前を取得するなどの便利な方法があります。そして、Java.timeの月数は1から12の正当なものであり、Java.util.Date/.Calendarにあるゼロベースのナンセンス(0から11)ではないことを確認してください。

現在の日時を取得するには、 タイムゾーン が重要です。いつでも日付は 世界中で同じ ではありません。したがって、月の終わり/初めに近い場合、月は世界中で同じではありません。

ZoneId zoneId = ZoneId.of( "America/Montreal" );  // Or 'ZoneOffset.UTC'.
ZonedDateTime now = ZonedDateTime.now( zoneId );
Month month = now.getMonth(); 
int monthNumber = month.getValue(); // Answer to the Question.
String monthName = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );

Java.time について

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

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

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

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

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

  • Java SE 8Java SE 9Java SE 1 、およびそれ以降
    • ビルトイン。
    • バンドル実装の標準Java APIの一部。
    • Java 9では、いくつかのマイナーな機能と修正が追加されています。
  • Java SE 6 および Java SE 7
    • Java.time機能の多くは、 ThreeTen-Backport でJava 6および7にバックポートされています。
  • Android
    • Java.timeクラスのAndroidバンドル実装の最新バージョン。
    • 初期のAndroid(<26)では、 ThreeTenABP プロジェクトが適応します ThreeTen-Backport (上記のとおり)。 ThreeTenABPの使い方… を参照してください。

ThreeTen-Extra プロジェクトはJava.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明するものです。 IntervalYearWeekYearQuartermore などの便利なクラスがあります。

5
Basil Bourque

あなたがJoda時間を使うことができず、あなたがまだ暗い世界に住んでいるなら:)(Java 5以下)あなたはこれを楽しむことができます:

注:日付がすでにdd/MM/YYYYの形式で作成されていることを確認してください。

/**
Make an int Month from a date
*/
public static int getMonthInt(Date date) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("MM");
    return Integer.parseInt(dateFormat.format(date));
}

/**
Make an int Year from a date
*/
public static int getYearInt(Date date) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
    return Integer.parseInt(dateFormat.format(date));
}
3
Badr DRAIFI
Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1

戻り値は0から始まるので、結果に1を加える必要があります。

0
twlkyao