🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

714閲覧

Java 日付の計算がprintlnで表示できない問題が解決できない

ryuya1204

総合スコア12

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/12/08 11:45

分からない部分

初歩的な質問で申し訳ございません。

Calendar calendar = Calendar.getInstance(); System.out.println(calendar.get(Calendar.YEAR) + 5); System.out.println(calendar.add(Calendar.MONTH, 5)); System.out.println(calendar.get(Calendar.DATE) + 15);

こちらのコードの部分ですが、4行目の
System.out.println(calendar.add(Calendar.MONTH, 5));
の部分が、addで使用すると、","で区切った部分が引数にみなされて、

型 PrintStream のメソッド println(boolean) は引数 (void) に適用できません

というエラーメッセージが表示されてしまいます。
そのままgetで使用すると、13月などのありえない月になってしまうので、調べたところaddを使用するのが良いとあったのですが、この記述のどこを変更すれば良いのかがわかりません。

使用は、JAVA SE 11になります。

javaのcalendarパッケージはインストールしています。

大変お手数おかけしますがご確認よろしくお願いいたします。

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

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

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

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

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

y_waiwai

2020/12/08 12:24

なにをしたいんでしょうか
ryuya1204

2020/12/08 12:26

コメントいただきありがとうございます。 現在のカレンダーの日にちを取得して、そのカレンダーの日にちに、指定の数値を足した結果を出力したいと考えております。 しかし、出力するに当たって、printlnでaddメソッドを使用すると、,の後が引数にみなされてエラーが発生してしまっている状態を解決したいと考えております。
guest

回答2

0

「,の後が引数にみなされて」いる訳ではありません。

add()では、calendarで管理している日付を翌月にするだけで、何も返さない(void)から、エラーになっているというのが、正しい理解です。

Calendar#add()の返り値は、voidであることを確認。
Calendar#add()仕様

voidは、値がないので、println()で出力できませんし、エラー内容と一致します。

なお、「,の後が引数にみなされて」いたとするならば、「,の後」の5は、println()の引数なので、"hoge"などと文字列に変更しても、同様のエラーにならないとおかしいですが、実際には異なるエラーになるかと。
(どんなエラーになるかは、ご自分で検証してください)

また、この解釈だと、カッコの数が合わなくなるので、Syntax Errorになるほうが自然です。

実際の処理は、JavaCommonsさんの回答にあるように、add()の後のcalendarの値を利用してください。
年、月、日を、各々add()してから、表示したい形式へ変換して、出力してください。
Calendarの日付形式

原因を仮定するのは良い事ですが、検証せずに確定してはいけません。
誤解を前提としての修正では、正しい修正からは遠ざかるばかりです。

投稿2020/12/08 12:59

編集2020/12/08 13:06
YT0014

総合スコア1748

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

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

0

ベストアンサー

サンプルを作ってみました。(5年5か月15日後の日付を求めるように修正しました)

  • calendar.add() は void型なので println() できません。
  • calendar.add() は println() しないで実行して、別途 calendar.get() の値を表示すれば良いでしょう。

java

1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) throws Exception { 5 Calendar calendar = Calendar.getInstance(); 6 // 今日は 2020/12/08 7 display(calendar); 8 calendar.add(Calendar.YEAR, 5); 9 calendar.add(Calendar.MONTH, 5); 10 calendar.add(Calendar.DATE, 15); 11 display(calendar); 12 } 13 static void display(Calendar cl) { 14 System.out.printf("%d/%d/%d\n", cl.get(Calendar.YEAR), cl.get(Calendar.MONTH)+1, cl.get(Calendar.DATE)); 15 } 16}

実行結果(今日は 2020/12/08)

2020/12/8 2026/5/23

投稿2020/12/08 12:27

編集2020/12/08 13:03
JavaCommons

総合スコア86

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

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

ryuya1204

2020/12/08 12:41

JaveCommons 様 ご丁寧にご回答いただきありがとうございます。 大変参考になりました。 ただ、私が実施したい内容としては、 5年5ヶ月15日先の日にちを取得したいというものでした。 説明不足で申し訳ございません。 もし、5年5ヶ月15日先の日にちだと、 日にちがズレてしまいます。 これは、各年と各月、各日にちを別個にそれぞれ足してしまっているからでした… わかりづらく大変申し訳ございません。
YT0014

2020/12/08 13:00

お手数ですが、上記コメントの内容で、質問を修正してください。
JavaCommons

2020/12/08 13:05

5年5ヶ月15日先の日にちを求めるようにサンプル(回答)を修正してみました。 これでどうでしょうか?
ryuya1204

2020/12/09 02:22

お二人様 ご回答いただきありがとうございます! おかげさまで無事解決しました。 仮定を決め付けていた部分もございましたので、実証を行える方法が無いかを考えていきます! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問