• ベストアンサー

Javaで入力した情報をつかってその週の頭の日にちをしりたい。

Javaで入力した情報をつかってその週の頭の日にちをしりたい。 詳しく書くと 入力した何年、何月、第何週という情報を使って その週の頭(日曜日)の日付をしりたいのです。 例えば 2010年 9月 第5週 というような情報を入力すると 26日ですという答えが出てくるようにしたいのですが なにかいい方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.3

1を書いた者です。もう少しよいものを書いてみました。今度はコンパイルできて動きます。 試してみたところ、週の頭を計算するとき月をまたいでしまう場合でもCalendarクラスはうまくやってくれるようですよ。 import java.util.*; public class FirstDayOfWeek { public static void main(String[] args) { int year = Integer.parseInt(args[0]); int month = Integer.parseInt(args[1]) - 1; int week = Integer.parseInt(args[2]) - 1; System.out.println(year + "-" + (1 + month) + "-" + (1 + week * 7)); Calendar c = Calendar.getInstance(); c.set(year, month, 1 + week * 7); int dow = c.get(Calendar.DAY_OF_WEEK); int offset = 0; switch (dow) { case Calendar.SUNDAY: offset = 0; break; case Calendar.MONDAY: offset = 1; break; case Calendar.TUESDAY: offset = 2; break; case Calendar.WEDNESDAY: offset = 3; break; case Calendar.THURSDAY: offset = 4; break; case Calendar.FRIDAY: offset = 5; break; case Calendar.SATURDAY: offset = 6; break; } c.set(year, month, 1 + week * 7 - offset); System.out.println(c.getTime()); int y = c.get(Calendar.YEAR); int m = 1 + c.get(Calendar.MONTH); int d = c.get(Calendar.DAY_OF_MONTH); System.out.println(y + "-" + m + "-" + d); } } 実行例。引数は年、月、週。月と週は1から始まる。 $ java FirstDayOfWeek 2010 9 5 2010-9-29 Sun Sep 26 15:43:58 JST 2010 2010-9-26 $ java FirstDayOfWeek 2010 10 1 2010-10-1 Sun Sep 26 15:44:08 JST 2010 2010-9-26

kick6ds
質問者

お礼

分かりやすくソースまで書いていただいて ありがとうございます! 遅くなってすいませんでした

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

2010年10月 第1週の場合も「26日です」という答えで良いのかな? 「9月26日です」なのかな? 2011年 1月 第1週の場合は「26日です」という答えで良いのかな? 「12月26日です」なのかな? それとも「2010年12月26日です」なのかな? 「日付(年月日)入力から、その週の先頭の日付を表示する」だったら 入力日付(年月日)の曜日(0-6)を求め、その値を減算するのが簡単なんでしょうね。 今回の場合は選択肢の組み合わせ分のテーブルを持つほうが簡単なように思います。

  • tyatsumi
  • ベストアンサー率58% (30/51)
回答No.1

こんな感じかなーと思います。 コンパイルも実行も試してないので、間違ってるところもあるかもしれませんが、ヒントとして使ってください。 year年month月week週(month, week は0から始まる)のとき週の頭day日を求めるには(day は1から始まる) Calendar c = Calendar.getInstance(); c.set(year, month, 1 + week * 7); int dow = c.get(Calendar.DAY_OF_WEEK); int offset = 0; switch (dow) { case Calendar.SUNDAY: offset = 0; break; case Calendar.MONDAY: offset = -1; break; case Calendar.TUESDAY: offset = -2; break; case Calendar.WEDNESDAY: offset = -3; break; case Calendar.THURSDAY: offset = -4; break; case Calendar.FRIDAY: offset = -5; break; case Calendar.SATURDAY: offset = -6; break; } int day = 1 + week * 7 + offset;

関連するQ&A