342

Java で現在の年を整数として判断する必要があります。を使用することもできますjava.util.Date()が、非推奨です。

4

15 に答える 15

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

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

于 2008-09-25T21:56:41.207 に答える
173

Java 8 の time API を使用すると (システムのデフォルト タイム ゾーンで年を取得できると仮定して)、次Year::nowメソッドを使用できます。

int year = Year.now().getValue();
于 2015-11-13T19:11:12.230 に答える
28

この最も単純な (Calendar を使用して申し訳ありません) は次のとおりです。

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

新しいDate and Time API JSRJoda Timeもあります

于 2008-09-25T22:00:04.553 に答える
15

tl;dr

ZonedDateTime.now(  ZoneId.of( "Africa/Casablanca" )  )
             .getYear()

タイムゾーン

Raffi Khatchadourianによる回答は、Java 8 で新しいjava.time パッケージを使用する方法を賢明に示しています。

int year = LocalDate.now().getYear();

そのコードは、JVM の現在のデフォルトのタイム ゾーンに依存します。デフォルト ゾーンは、今日の日付を決定する際に使用されます。たとえば、パリの真夜中を過ぎても、モントリオールの日付はまだ「昨日」であることを思い出してください。

そのため、実行するマシン、ホスト OS のタイム ゾーンを変更するユーザー/管理者、または JVM の現在のデフォルトを変更する Java コードによって、結果が異なる場合があります。タイムゾーンを指定することをお勧めします。

ところで、常にIANA で定義されている適切なタイム ゾーン名を使用してください。標準化されておらず、一意でもない 3 ~ 4 文字のコードは使用しないでください。

java.time

Java 8 の java.time の例。

int year = ZonedDateTime.now(  ZoneId.of( "Africa/Casablanca" )  ).getYear() ;

Joda-Time

上記のアイデアですが、Joda-Time 2.7 ライブラリを使用しています。

int year = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).getYear() ;

増減する年

目標が一度に 1 年ずつジャンプすることである場合、年数を抽出する必要はありません。Joda-Time と java.time の両方に、一度に年を加算/減算するメソッドがあります。そして、これらの方法はスマートで、夏時間やその他の異常を処理します。

java.timeの例。

ZonedDateTime zdt = 
    ZonedDateTime
    .now(  ZoneId.of( "Africa/Casablanca" )  )
    .minusYears( 1 ) 
;

Joda-Time 2.7 の例。

DateTime oneYearAgo = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).minusYears( 1 ) ;
于 2015-05-03T21:42:24.140 に答える
14

The easiest way is to get the year from Calendar.

// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
于 2008-09-25T21:58:47.253 に答える
10

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

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;
}
于 2011-07-20T12:02:38.633 に答える
5

Java 8 には次のコードを使用します。

LocalDate localDate = LocalDate.now();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int date = localDate.getDayOfMonth();
于 2019-08-07T09:49:26.870 に答える
4

アプリケーションが Date オブジェクトと Calendar オブジェクトを多用している場合、変更可能なので Joda Time を使用する必要がありますjava.util.Datejava.util.Calendarフィールドが更新されるとパフォーマンスの問題があり、日時演算には扱いにくいです。

于 2008-09-25T22:16:48.070 に答える
3

一部の人々が上で答えたように:

変数を後で使用する場合は、次のように使用することをお勧めします。

int year;

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

条件だけで年が必要な場合は、次を使用することをお勧めします。

Calendar.getInstance().get(Calendar.YEAR)

たとえば、導入された年が現在の年 - 200 よりも小さくないか、現在の年よりも大きい (誕生年である可能性があります) 場合に do で使用します。

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));
}
于 2014-11-24T14:34:16.573 に答える
0

私の場合、上記のどれも機能しません。だから、多くの解決策を試した後、私は以下の解決策を見つけ、それは私のために働いた

import java.util.Scanner;
import java.util.Date;

public class Practice
{   
    public static void main(String[] args)
    {
        Date d=new Date();  
        int year=d.getYear();
        int currentYear=year+1900;    

        System.out.println(currentYear);

    }

}
于 2020-06-11T16:46:46.847 に答える
-2

カレンダーをインスタンス化する必要なく、整数演算を使用してすべてを実行できます。

return (System.currentTimeMillis()/1000/3600/24/365.25 +1970);

正月に1時間か2時間オフになるかもしれませんが、それが問題であるという印象はありませんか?

于 2008-09-26T06:17:50.660 に答える
-2

Java バージョン 8以降では、 java.timeライブラリを使用できます (推奨)。ISO 8601は、日付の標準的な書き方を設定し、それYYYY-MM-DDjava.time.Instant使用しますUTC

import java.time.Instant;
int myYear = Integer.parseInt(Instant.now().toString().substring(0,4));

PS 念のため (および getStringではなくget の略int)、 usingCalendarのほうが見栄えがよく、ゾーン対応にすることができます。

于 2019-11-13T12:46:47.760 に答える
-5

ライブラリで特別な関数を使用して、日/月/年の整数を操作します-

int[] int_dmy( long timestamp ) // remember month is [0..11] !!!
{
  Calendar cal = new GregorianCalendar(); cal.setTimeInMillis( timestamp );
  return new int[] { 
    cal.get( Calendar.DATE ), cal.get( Calendar.MONTH ), cal.get( Calendar.YEAR )
  };
};


int[] int_dmy( Date d ) { 
 ...
}
于 2008-09-26T04:24:40.947 に答える