Javaの現在の年を整数として決定する必要があります。 Java.util.Date()
を使うこともできますが、これは推奨されません。
int year = Calendar.getInstance().get(Calendar.YEAR);
これが新しいカレンダーを設定しないという基準を満たしているかどうかわかりませんか。 (なぜそうすることに反対するのか?)
Java 8のtime APIを使って(あなたのシステムのデフォルトのタイムゾーンで年を取得したいと思っているならば)、 Year::now
メソッド を使うことができます。
int year = Year.now().getValue();
これが最も簡単です(カレンダーを使用して申し訳ありません)。
int year = Calendar.getInstance().get(Calendar.YEAR);
新しい Date and Time API JSR 、および Joda Time もあります。 - )
最も簡単な方法はCalendarから年を取得することです。
// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
任意の日付オブジェクトの年が必要な場合は、次の方法を使用しました。
public static int getYearFromDate(Date date) {
int result = -1;
if (date != null) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
result = cal.get(Calendar.YEAR);
}
return result;
}
Java.time.YearMonth
から2つのメソッドを使うこともできます(Java 8以降)。
import Java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();
ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) )
.getYear()
回答 by Raffi Khatchadourian はJava 8で新しい Java.timeパッケージ の使い方を賢く示しています。日付を決定する際に。
int year = LocalDate.now()。getYear();
そのコードは、JVMの現在のデフォルトタイムゾーンによって異なります。デフォルトゾーンは、今日の日付を決定するために使用されます。たとえば、パリの深夜0時過ぎの時点でモントリオールの日付はまだ「昨日」であることを忘れないでください。
そのため、結果は実行されるマシン、ホストOSのタイムゾーンを変更するユーザー/管理者、または任意のJavaコード いつでも JVMの現在のデフォルトを変更することによって変わります。タイムゾーンを指定した方が良いです。
ところで、 IANAで定義 として常に 適切なタイムゾーン名 を使用してください。標準化も一意でもない3〜4文字のコードを絶対に使用しないでください。
Java 8のJava.timeの例です。
int year = ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) ).getYear() ;
上記と同じアイデアですが、 Joda-Time 2.7ライブラリを使用します。
int year = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).getYear() ;
あなたの目標が一度に年をジャンプすることであるならば、年数を抽出する必要はありません。 Joda-TimeとJava.timeのどちらにも、一度に年を足したり引いたりするためのメソッドがあります。そして、それらの方法は賢く、夏時間やその他の異常を処理します。
Joda-Timeの例2.7.
DateTime oneYearAgo = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).minusYears( 1 ) ;
アプリケーションがDateおよびCalendarオブジェクトを多用する場合は、Java.util.Date
は可変であるため、実際にはJoda Timeを使用する必要があります。 Java.util.Calendar
は、そのフィールドが更新されるときにパフォーマンス上の問題を抱えており、日時演算に関しては不格好です。
何人かの人々が上で答えたように:
後で変数を使用したい場合は、次のようにしてください。
int year;
year = Calendar.getInstance().get(Calendar.YEAR);
あなたがちょうど条件のために年を必要とするならば、あなたはよりよく使う:
Calendar.getInstance().get(Calendar.YEAR)
たとえば、そのチェックが導入された年がdo-doで使用されているのは、現在の200年以上、または現在の年を超えていません(誕生年かもしれません)。
import Java.util.Calendar;
import Java.util.Scanner;
public static void main (String[] args){
Scanner scannernumber = new Scanner(System.in);
int year;
/*Checks that the year is not higher than the current year, and not less than the current year - 200 years.*/
do{
System.out.print("Year (Between "+((Calendar.getInstance().get(Calendar.YEAR))-200)+" and "+Calendar.getInstance().get(Calendar.YEAR)+") : ");
year = scannernumber.nextInt();
}while(year < ((Calendar.getInstance().get(Calendar.YEAR))-200) || year > Calendar.getInstance().get(Calendar.YEAR));
}
Java 8の LocalDate
を使うこともできます。
import Java.time.LocalDate;
//...
int year = LocalDate.now().getYear();
Java 8には次のコードを使用します。
LocalDate localDate = LocalDate.now();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int date = localDate.getDayOfMonth();