質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

3979閲覧

javaのCalendar型 日付の取得時の日付のずれについて

ode

総合スコア25

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/09/29 13:42

javaのCalendar型を使って日付の操作をしています。
しかし、なんだかセットした日付とゲットした日付がずれるな、と思い、今年度の全ての月末日を取得してみました。
そうすると、実行結果のようになってしまい...
なぜこのような出力になるのでしょうか?

java

1public static void main(String[] args) { 2 3 Calendar cal = Calendar.getInstance(); 4 cal.clear(); 5 6 cal.set(2018, 1, 31); 7 8 System.out.print("1/31 -> YEAR: " + cal.get(Calendar.YEAR)); 9 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 10 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 11 12 cal.set(2018, 2, 28); 13 14 System.out.print("2/28 -> YEAR: " + cal.get(Calendar.YEAR)); 15 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 16 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 17 18 cal.set(2018, 3, 31); 19 20 System.out.print("3/31 -> YEAR: " + cal.get(Calendar.YEAR)); 21 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 22 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 23 24 cal.set(2018, 4, 30); 25 26 System.out.print("4/30 -> YEAR: " + cal.get(Calendar.YEAR)); 27 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 28 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 29 30 cal.set(2018, 5, 31); 31 32 System.out.print("5/31 -> YEAR: " + cal.get(Calendar.YEAR)); 33 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 34 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 35 36 cal.set(2018, 6, 30); 37 38 System.out.print("6/30 -> YEAR: " + cal.get(Calendar.YEAR)); 39 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 40 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 41 42 cal.set(2018, 7, 31); 43 44 System.out.print("7/31 -> YEAR: " + cal.get(Calendar.YEAR)); 45 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 46 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 47 48 cal.set(2018, 8, 31); 49 50 System.out.print("8/31 -> YEAR: " + cal.get(Calendar.YEAR)); 51 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 52 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 53 54 cal.set(2018, 9, 30); 55 56 System.out.print("9/30 -> YEAR: " + cal.get(Calendar.YEAR)); 57 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 58 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 59 60 cal.set(2018, 10, 31); 61 62 System.out.print("10/31 -> YEAR: " + cal.get(Calendar.YEAR)); 63 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 64 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 65 66 cal.set(2018, 11, 30); 67 68 System.out.print("11/30 -> YEAR: " + cal.get(Calendar.YEAR)); 69 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 70 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 71 72 cal.set(2018, 12, 31); 73 74 System.out.print("12/31 -> YEAR: " + cal.get(Calendar.YEAR)); 75 System.out.print(" MONTH:" + (cal.get(Calendar.MONTH) + 1)); 76 System.out.println(" DATE:" + cal.get(Calendar.DATE)); 77 }
1/31 -> YEAR: 2018 MONTH:3 DATE:3 2/28 -> YEAR: 2018 MONTH:3 DATE:28 3/31 -> YEAR: 2018 MONTH:5 DATE:1 4/30 -> YEAR: 2018 MONTH:5 DATE:30 5/31 -> YEAR: 2018 MONTH:7 DATE:1 6/30 -> YEAR: 2018 MONTH:7 DATE:30 7/31 -> YEAR: 2018 MONTH:8 DATE:31 8/31 -> YEAR: 2018 MONTH:10 DATE:1 9/30 -> YEAR: 2018 MONTH:10 DATE:30 10/31 -> YEAR: 2018 MONTH:12 DATE:1 11/30 -> YEAR: 2018 MONTH:12 DATE:30 12/31 -> YEAR: 2019 MONTH:1 DATE:31

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

month - MONTHカレンダ・フィールドの設定に使用する値。Month値は0から始まる(1月は0になる)。

java.util.Calendarクラスのmonthは実際の月の-1で表されます。(0-11)
参考

投稿2018/09/29 13:53

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ode

2018/09/29 13:59

ご回答ありがとうございます。 私は月が1つずれるのはゲットする時だと思っていましたが、 実際にはセットするときにずれるということでしょうか?
swordone

2018/09/29 14:00

getの時は1足してるのにsetのときにそのこと忘れてますね。
dice142

2018/09/29 14:03

getもsetも両方ですね。 参考として貼ったCalendar#setのリンクにも記載されてますのでご一読ください。
ode

2018/09/29 14:08

ありがとうございます。 なぜが、ゲットするときだけ月がずれる!と思いこんでおりました。 解決いたしました。
dice142

2018/09/29 14:09

BAを選んで解決済みにしていただくようお願いします。
guest

0

LocalDateなら月の数字がそのまま使えます。

投稿2018/09/30 00:37

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問