• ベストアンサー

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

  • ACCESSで入力した日付の週の日曜日を

    ACCESSで日付を入力して、その週(週のスタートを日曜日として)の 日曜日の日付を求めたいのですがどのようにしたら良いでしょうか。 以前に質問させて頂いたのですが解決しないので再度宜しくお願い致します。

  • ACCESSで入力した日付の週の日曜日を

    ACCESSで日付を入力して、その日付の週の日曜日を求めるには どのようにしたら良いでしょうか。 宜しくお願い致します。

  • エクセル日にち間隔で日曜日を除いた値

    B列3行目以降        C列        D列             E列 (日付)         (日にち間隔数)    (日曜日除く間隔数)  (データ値)  H23年6月22日(水) H23年6月30日(木)      8           7 H23年7月1日(金)      1           1 H23年8月1日(月)      31           26 H23年8月28日(日)      27           24(28日の日曜日は含む) H23年9月30日(金)      33           28 日付入力は2011/6/21 B列表示形式はge"年"m"月"d"日"(aaa) 日付間隔は=IF(OR(ISBLANK(B3),ISBLANK(B4)),"",DATEDIF(B3,B4,"d")) の式を ネットで調べ、B列に不特定日を入力し、各、日にち間隔の数値を出しています。 ・行いたいのは  データの記録表を作成していますが、B列に不特定日を入力し、日曜日だけを除いた  日にち間隔の数値をD列に出したいです。  但し、B列に入力した日付が日曜日の場合は、その日も含みます。 エクセル素人につき、 <WEEKDAY関数は、曜日に対応した数値を返します。数値と曜日の対応> などをどのように利用して良いか分かりません。 エクセルは2000です。 アドバスの程よろしくお願いします。 過去(質問番号:6992865)で同じような質問させていただきましたが、質問内容が 悪く、締め切らせていただいてます。 (ご回答頂いた方々ありがとうございました。)

  • Excelでカレンダーを作成。日にちを自動的に・・・

    Excel2000でカレンダーを作成中なのですが質問です。 Sheet1に2006年1月、Sheet2に2月・・・とシートごとにひと月。 日にちはB列、曜日を右隣のC列に縦に入力。 E2に○月と月の数字を入力したたけで、B/C列の日付け・曜日を自動的に入力させる方法はありますか? 出来れば、土曜日の日にち・曜日を紺・日曜日はピンクと書式の色を変えたいので、その作業も自動的にしてくれると大変ありがたいのです。 ヘルプやサイト検索などしてみましたが、よく分かりませんでした・・・。 出来れば夕方までには完成させたいです。 お時間のある方、宜しくお願い致します。

  • 指定した日付が、その月の第何週かを求める方法

    月曜から日曜の作業内容を 書く報告書作成画面の作成をしています。 処理の一つに、 作成したい週の月曜の年月日を入力し、 日曜までの日付を自動的に画面に出す、 というものがあります。 さらに自動的に出した日曜日の日付から、 報告書作成週はその月の第何週かを求める、 (今月ですと10/6は第1週、10/13は第2週、 10/20は第3週、10/27は第4週、となります) という処理を作成したいのですが、 良いロジックが思い浮かびません。 (処理する月の日付と曜日を配列に入れて、 ループカウントで第何週かを求める、という 方法は思いついたのですが、効率が悪いと思うので…) 何か良いロジックがありましたら、 書き込みをお願い致します。

  • 毎週週頭を月曜として 日付を自動的に入力したいです

    いつもお世話になっています。 データを毎週集計しています。 毎週週頭を月曜として、日付を自動的に入力したいです。 B2に当月の日付を"ctrl+れ"を押すと当月の最初の人最後の日を自動的に入力する数式はわかったのです。 しかし、各週の最初の日と最後の日が自動表示する関数がわかりません。 御指導よろしくお願いします。

  • 日にちの求め方

    テキストボックスに「2005/01」と入力させて、コマンドボタンを押すと、1月は31日まであるのでラベルに「31」と表示する。 同じく「2005/06」と入力すると6月は30日まであるので「30」と表示させるような仕組みを作りたいのですが、月の最終日の日付(1月なら31日、6月なら30日)の取得方法がわかりません。 ご教授のほど、宜しくお願いします。

  • エクセルの作成(日にち入力)について

    A1に1と入力すると、B列に1月の1日から31日までの土曜・日曜・祝祭日(休日)を除いた日、 A1に2と入力すると、B列に2月の1日から28、29日まで土曜・日曜・祝祭日(休日)を除いた日のように、 A1に月の数(1~12)を入力すると、その月の土曜・日曜・祝祭日(休日)を除いた日を表示させたいのですが、 可能でしょうか。 可能であれば、どのように作成すれば良いのか教えて頂きたいと思います。 よろしくお願いします。

  • 日にちの隣の列を書き出すには?

    A列に日付(西暦、月、日)、B列には曜日(祝日は祝と反映)が一年分入力されています。(2009年とは限りません) C1セルにある日にちを月と日だけで入力(たとえば1月1日)したときにD1セルに対応する日付の曜日の欄のセル番号(1月1日の場合は B1、2月1日の場合はB32)と表示させる方法を教えて下さい。(なぜB1と表示させたいのかというと、 B1 をindex関数で参照して別の作業をしたいからです) 以下は私がチャレンジしてダメだった内容です。 難しいのは、A列の日付が過去の日付という事です。C1セルにはただ単に1月1日、とだけ入力するようにしたいので、セルの日にちは自動的に「今年の」1月1日になってしまいます。A列が昨年以前の日付だとすると、C1=A列にはならないので、簡単なlookup関数などでは処理できません。 E列に=month(A1)、F列に=day(A1) 、として下までコピーし、month(C1)とday(C1)と同じものを探す、なんていうやり方は頭にあるのですが、それを表現できません。 また、A列でヒットした場合、B列のセル番号を返す、(A123が同じだった場合にB123と返す)というのが私の知識では及びません。(1つ下のセル、なら、row+1ですが、1つ右のセル、だと、column+1ではできない) いろいろなやり方があると思いますが、これを使って1年分の売り上げ分析を一枚のシートでやろうと思っているので、なるべくこの部分で複雑な展開にはしたくありません(ファイルが重たくなる)。 皆さんのお知恵をお願いいたします。 よろしくお願いします。

  • 第n週を求める

    http://okweb.jp/kotaeru.php3?qid=1059401 の質問で、 日曜から始まるカレンダーにおいて 2004/10/29の様な日付が 第何週にあたるかということで 以下のような式を入力しました。 INT((DAY(A1)+WEEKDAY(DATE(YEAR(A1),MONTH(A1),1))-2)/7)+1 結局望まれたような式ではなかったのですが、 「いくつかの月では第1週が出ずに、2週目に第1週と出ました」 ということだったのですが、 自分なりにいくつか調べてみた所、とくにおかしいところもないような気がするのですが、よくわかりません。 おかしくなる月(日付)は、どんな日付で 式として何が誤っていたのでしょうか?