web-dev-qa-db-ja.com

月は日付から印刷されません-Java DateFormat

Javaの日付から月を取得する方法:

        DateFormat inputDF  = new SimpleDateFormat("mm/dd/yy");
        Date date1 = inputDF.parse("9/30/11");

        Calendar cal = Calendar.getInstance();
        cal.setTime(date1);

        int month = cal.get(Calendar.MONTH);
        int day = cal.get(Calendar.DAY_OF_MONTH);
        int year = cal.get(Calendar.YEAR);

        System.out.println(month+" - "+day+" - "+year);

このコードは日と年を返しますが、月は返しません。

出力:

0 - 30 - 2011
10
bigData

これは、形式が正しくないためです:"MM/dd/yy"の理由は、"mm"は分です:

DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");
Date date1 = inputDF.parse("9/30/11");

Calendar cal = Calendar.getInstance();
cal.setTime(date1);

int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);

System.out.println(month+" - "+day+" - "+year);

プリント8 - 30 - 2011(月はゼロから始まるため デモ

17
dasblinkenlight

まず、日付形式でmmを使用しました Javadocsによると「分」 。分ではなく、9に設定しました。月のデフォルトは0(1月)のようです。

MM(大文字の「M」)を使用して月を解析します。次に、8が表示されます。これは Calendar月では、1ではなく0で始まる であるためです。 1を追加して、目的の9を取得します。

グレゴリオ暦とユリウス暦の年の最初の月は、JANUARYであり、0です。

// MM is month, mm is minutes
DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");  

以降

int month = cal.get(Calendar.MONTH) + 1; // To shift range from 0-11 to 1-12
5
rgettman

SimpleDateFormat javadoc を読むと、mmは分単位であることがわかります。 1か月はMMが必要です。

DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");

それ以外の場合、形式はmonthフィールドを読み取らず、値を0と見なします。

誰かが現代的な答えを提供する時間です。他の回答は、2013年に質問されたときの良い回答でしたが、まだ正しいです。今日、古くて時代遅れで悪名高い面倒なSimpleDateFormatクラスと格闘する必要がある理由はありません。 Java.time、最新のJava日付と時刻のAPIであり、次のように使用するとより優れています。

    DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("M/d/yy");
    LocalDate date1 = LocalDate.parse("9/30/11", inputFormatter);
    System.out.println(date1);

これはプリント

2011-09-30

LocalDateクラスは、時刻なしの日付を表し、必要なものを正確に表します。古いクラスDateおよびCalendarよりも正確に要件に一致します。

DateTimeFormatterで使用されるフォーマットパターン文字列は、SimpleDateFormatの文字列に似ていますが、いくつかの違いがあります。大文字のMMを使用して2桁の月(9月の09など)を要求するか、単一のMを使用して月を1桁または2桁で書き込むことができます。同様に、ddまたはdは月の日です。 yyは2桁の年を示し、2000を基数として解釈されます。つまり、2000から2099までを含みます(私の誕生日には機能しません)。

LinkOracle tutorial Trail:Date Time 使用方法の説明Java.time

1
Ole V.V.

月の形式はMMではなくmmにする必要があります

 DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");
1
Prabhaker

mmisは分です。形式を指定するときはMMを使用してください。

Calendar cal = Calendar.getInstance();
cal.setTime(date1);

int month = cal.get(Calendar.MONTH);// returns month value index starts from 0
0
Dax Joshi

MMの代わりにmmを使用してこのようにしてみてください:-

    DateFormat inputDF  = new SimpleDateFormat("MM/dd/yy");
    Date date1 = inputDF.parse("9/30/11");

    Calendar cal = Calendar.getInstance();
    cal.setTime(date1);

    int month = cal.get(Calendar.MONTH);
    int day = cal.get(Calendar.DAY_OF_MONTH);
    int year = cal.get(Calendar.YEAR);

    System.out.println(month+" - "+day+" - "+year);

インデックスが0から始まるため、印刷される月は8になります

またはで試してください:-

int month = cal.get(Calendar.MONTH) + 1;
0
Rahul Tripathi