web-dev-qa-db-ja.com

現在の年の整数値をJavaで取得する

Javaの現在の年を整数として決定する必要があります。 Java.util.Date()を使うこともできますが、これは推奨されません。

260
karlgrz
int year = Calendar.getInstance().get(Calendar.YEAR);

これが新しいカレンダーを設定しないという基準を満たしているかどうかわかりませんか。 (なぜそうすることに反対するのか?)

563
cagcowboy

Java 8のtime APIを使って(あなたのシステムのデフォルトのタイムゾーンで年を取得したいと思っているならば)、 Year::nowメソッド を使うことができます。

int year = Year.now().getValue();
109
assylias

これが最も簡単です(カレンダーを使用して申し訳ありません)。

 int year = Calendar.getInstance().get(Calendar.YEAR);

新しい Date and Time API JSR 、および Joda Time もあります。 - )

25
toolkit

最も簡単な方法はCalendarから年を取得することです。

// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
13
conmulligan

任意の日付オブジェクトの年が必要な場合は、次の方法を使用しました。

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;
}
10
basZero

Java.time.YearMonthから2つのメソッドを使うこともできます(Java 8以降)。

import Java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();

tl; dr

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.time

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 ) ;
8
Basil Bourque

アプリケーションがDateおよびCalendarオブジェクトを多用する場合は、Java.util.Dateは可変であるため、実際にはJoda Timeを使用する必要があります。 Java.util.Calendarは、そのフィールドが更新されるときにパフォーマンス上の問題を抱えており、日時演算に関しては不格好です。

4
Alan

何人かの人々が上で答えたように:

後で変数を使用したい場合は、次のようにしてください。

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));
}
3
maral04

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();
0
KayV