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

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

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

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

Q&A

解決済

2回答

4363閲覧

javaで月曜日の値を取得したい

ataru2222

総合スコア272

Java

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

0グッド

0クリップ

投稿2021/06/14 02:07

前提・実現したいこと

javaで月曜日の値を取得したい

発生している問題・エラーメッセージ

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1189959911
こちらのサイトを参考に月曜日の値を取得するプログラムを書きたいのですが、

int week = cal.get(Calendar.DAY_OF_WEEK); の部分と
(ローカル変数 Calendar cal;の追加でエラー解除はできたがこれで良いのか不明)

lWeek1 = now.add(Calendar.DAY_OF_MONTH, -week-6);
lWeek2 = now.add(Calendar.DAY_OF_MONTH, -week);  こちらの2行のところでエラーが出てしまいます。
(型の不一致: void から Calendar には変換できません)
2012年の回答なのでvar違いによるものなのか?少しわからなかったので質問させていただきました。

該当のソースコード

Calendar now = Calendar.getInstance(); //曜日を取得 int week = cal.get(Calendar.DAY_OF_WEEK); // 0:日曜,1:月曜,,,6:土曜 なので // 1-6ならそのまま引いた日付が先週の日曜 // 0なら7を引けば先週の日曜 int endDay=week; if (week==0) endDay+=7; //日付を加減算する Calendar lWeek1;//先週の月曜 Calendar lWeek2;//先週の日曜 lWeek1 = now.add(Calendar.DAY_OF_MONTH, -week-6); lWeek2 = now.add(Calendar.DAY_OF_MONTH, -week); System.out.println("先週は" + lWeek1 + "~" + lWeek2);

試したこと

void型 calender型について調べてものの、calender型も型変換も使ったことの無い形式のため正解がよく分かりませんでした。

こちらについてお分かりになられる方いらっしゃいましたら、ご教授願います。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

y_waiwai

2021/06/14 02:09

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、いらぬ翻訳省略しないで、出たそのママをコピペで提示してください
guest

回答2

0

ベストアンサー

今Javaで日付を扱うなら、LocalDateを使う方が楽。

java

1LocalDate now = LocalDate.now(); 2LocalDate lWeek2 = now.with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)); 3LocalDate lWeek1 = lWeek2.with(TemporalAdjusters.previous(DayOfWeek.MONDAY));

投稿2021/06/14 03:18

swordone

総合スコア20669

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

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

ataru2222

2021/06/15 04:16

回答していただきまして、ありがとうございます。 先週の月曜日の値を取得するコードはcalenderクラスを書かなくても書けるのですね。 とても勉強になりました。 本当にありがとうございまいた。
guest

0

Java

1lWeek1 = now.add(Calendar.DAY_OF_MONTH, -week-6);

ここで、nowに入っている日の前の週の月曜日を表すオブジェクトをlWeek1に代入しようとしているのでしょうが、これが出来ないということです。
ここでいうnow.add(Calendar.DAY_OF_MONTH, -week-6)はvoidを返すわけですが、voidとは「無」のことです。(つまり戻り値がない)

直すとしたらこのようになります。
(このままだと、日付を"2021/06/07"のような形で表示することはできませんし、日付の計算も間違っているようにみえますが。。これは別途調べてみてください)

Calendar now = Calendar.getInstance(); // 曜日を取得 int week = now.get(Calendar.DAY_OF_WEEK); // 0:日曜,1:月曜,,,6:土曜 なので // 1-6ならそのまま引いた日付が先週の日曜 // 0なら7を引けば先週の日曜 int endDay = week; if (week == 0) endDay += 7; // 日付を加減算する Calendar lWeek1 = (Calendar) now.clone(); // 先週の月曜 Calendar lWeek2 = (Calendar) now.clone(); // 先週の日曜 lWeek1.add(Calendar.DAY_OF_MONTH, -week - 6); lWeek2.add(Calendar.DAY_OF_MONTH, -week); System.out.println("先週は" + lWeek1 + "~" + lWeek2.toString());

投稿2021/06/14 02:22

編集2021/06/14 02:23
hallen0225

総合スコア587

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

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

ataru2222

2021/06/14 02:49

回答していただきありがとうございます。 Calendar lWeek1 = (Calendar) now.clone().add(Calendar.DAY_OF_MONTH, -week - 6); // 先週の月曜 こちらのadd();に入る値がどうしてもわかりません。 add("2021/06/14") add("2021/06/14", -week - 6) など直接値を入れてみても「メソッド add(String, int) は型 Object で未定義です」と表示される状況です。 こちらについてもう少しヒントをいただけないでしょうか? よろしくお願いいたします。
hallen0225

2021/06/14 02:57 編集

そのコードでは、"now.clone()"がObject型なのが原因ですね。(Calendar型に変換する前にaddメソッドを呼び出してしまっています) 引数に入れる値の問題ではないですし、そもそも第一引数に入るものは日付でも文字列でもありません。
ataru2222

2021/06/15 04:21

回答していただきありがとうごいました。 結局、より短いコードで書けるLocalDateを採用しました。 とても勉強になりました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問