プロが教えるわが家の防犯対策術!

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

詳しく書くと
入力した何年、何月、第何週という情報を使って
その週の頭(日曜日)の日付をしりたいのです。

例えば
2010年 9月 第5週 というような情報を入力すると
26日ですという答えが出てくるようにしたいのですが
なにかいい方法はありますか?

A 回答 (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
    • good
    • 0
この回答へのお礼

分かりやすくソースまで書いていただいて
ありがとうございます!

遅くなってすいませんでした

お礼日時:2010/10/15 07:52

2010年10月 第1週の場合も「26日です」という答えで良いのかな?


「9月26日です」なのかな?

2011年 1月 第1週の場合は「26日です」という答えで良いのかな?
「12月26日です」なのかな?
それとも「2010年12月26日です」なのかな?


「日付(年月日)入力から、その週の先頭の日付を表示する」だったら
入力日付(年月日)の曜日(0-6)を求め、その値を減算するのが簡単なんでしょうね。

今回の場合は選択肢の組み合わせ分のテーブルを持つほうが簡単なように思います。
    • good
    • 0

こんな感じかなーと思います。


コンパイルも実行も試してないので、間違ってるところもあるかもしれませんが、ヒントとして使ってください。

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;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!