Dateオブジェクトから月を整数として取得するにはどうすればよいですか(Java.util.Date
)。
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
メソッド.
Java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
Java 8 date apiを使用すると、1行で直接入手できます。
LocalDate today = LocalDate.now();
int month = today.getMonthValue();
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 8以降に組み込まれています。これらのクラスは、 Java.util.Date
、 Calendar
、& SimpleDateFormat
のような、面倒な古い レガシー 日時クラスに代わるものです。
Joda-Time プロジェクトは、現在 メンテナンスモード になっており、 Java.time クラスへの移行を推奨しています。
詳細は、 Oracle Tutorial を参照してください。そして多くの例と説明についてはStack Overflowを検索してください。指定は JSR 31 です。
あなたは Java.time オブジェクトをあなたのデータベースと直接交換することができます。 JDBC 4.2 以降に準拠した JDBCドライバー を使用してください。文字列もJava.sql.*
クラスも必要ありません。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトはJava.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明するものです。 Interval
、 YearWeek
、 YearQuarter
、 more などの便利なクラスがあります。
あなたが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));
}
Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1
戻り値は0から始まるので、結果に1を加える必要があります。