Javaで配列に日付を入れる方法

このQ&Aのポイント
  • Javaの配列に1年の始めから終わりまでの日付を入れる方法について知りたいです。
  • 配列に日付を入れるためには、年、月、日の値を取得する必要がありますが、具体的な方法が分かりません。
  • 他の方法で配列に日付を入れることができれば、それについても知りたいです。
回答を見る
  • ベストアンサー

配列の要素に1年の始めから終わりまでの日付を入れたい。

 String date = new String[365]; という配列の各要素に2002.1.1から 2002.12.31までを入れたいのですが。。 int y; //year int m; //month int d; //day for(int i = 0; i < 365; i++){ date[i] = y + "." + m + "." + d; } 上記の様な感じで配列の要素を入れたいと思っているのですが、y , m , d の取得の仕方が全然分かりません。  誰か知っている人がいたら教えてください。また、上記の様な方法でなくても、配列に日付を入れることができたら、どんな方法でも、構いません。 よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • kaji
  • ベストアンサー率32% (27/84)
回答No.1

kamkamkam3さんが書かれているプログラムをいかすとすれば・・・ 最初にy,m,dを2002,1,1に初期化して・・・ ループの途中でyをインクリメント・・・ 月末部分だけ例外処理(月末の翌日はd=1,m++) ってな感じでどうでしょう。 私が、つくった日付系のプログラムでは、別の考え方で関数をつくっていますが・・・それは、説明が面倒だから教えてあげません・・・って、いやインターネット上に同様のアルゴリズムがたくさん転がってて、別に私の側窓的なやつじゃないから、説明するのが恥ずかしいってのが正しいです。

kamkamkam3
質問者

お礼

どうもご返事ありがとうございました。 私なりに工夫したのですが、1月分はちゃんと入ったんですよ。ところが2月以降は全部2002.2.1もしくは2002.3.1になってしまって。 以下のコードです。 //1月分 for(int i = 0; i < 31; i++){   s[i] = "2002.1." + String.valueOf(i + 1); } //2月分 for(int i = 31; i < 59; i++){ int k = 1; s[i] = "2002.2." + String.valueOf(k); k++; } //3月分 for(int i = 59; i < 90; i++){ int k = 1; s[i] = "2002.3." + String.valueOf(m); m++; } //表示 for(int i = 0; i < 90; i++) System.out.println(s[i]); なぜかしらん?明日違う方法で試してみたいと思います。 上記のことに関しては気にしないでください。うちのパソコンは以前壊れてしまったので、そのせいだと思います。ただ、状況をお知らせしようと思いまして。 どうもありがとうございました。

その他の回答 (1)

  • kaji
  • ベストアンサー率32% (27/84)
回答No.2

すみません 回答にミスが・・・ 誤「ループの途中でyをインクリメント・・・ 」 正「ループの途中でdをインクリメント・・・ 」 ついでに・・ 参考URLのプログラムはJavaでなく、 Cで書いてます。 このCGIで「インターネット上に同様のアルゴリズムがたくさん転がって」る関数を使ってはいますが、JAVAのCGIではないです。

kamkamkam3
質問者

お礼

どうも。。。一晩寝てすっきりしたところできました。以下のコードです。 import java.util.*; public class cal6 { public static void main(String[] args){ Calendar cal = Calendar.getInstance(); for(int i = 0; i < 365; i++){ cal.set(2002,0,i + 1); int y = cal.get(Calendar.YEAR); int m = cal.get(Calendar.MONTH) + 1; int d = cal.get(Calendar.DATE); String str[] = new String[365]; str[i] = String.valueOf(y) + "." + String.valueOf(m) + "." + String.valueOf(d); System.out.println(str[i]); } } } ありがとうございました。では、又の機会に。

関連するQ&A

  • C言語で分からないところがあるのですが……

    C言語で分からないところがあるのですが…… すみません。C言語を学習していてつまづいたので、皆さんの意見を聞きたいと思います。 現在、カレンダーを表示するプログラムをつくっています。 Yearとmonthをユーザが入力すると、その年その月のカレンダーが出るという算段です。(画像貼っておきます。ソースコードは下) これはできました。 これをいじって、Yearをユーザから受け取ると、その年の1月から12月までのカレンダーがば~っと表示されるようにしろ、と言われました。 Yearとmonthを受け取って書くやつは友人の助けを得ながらなんとかかけましたが、もう無理です。多分、for文を使うんだと思うんですが……助けてください! #include <stdio.h> int dayofweek(int year, int month); int daysinmonth(int year, int month); int daysinyear(int year); void showcal(int dow, int days); int main(void) { int year, month; int dow; int dim; printf ("Year?: "); scanf ("%d", &year); printf ("Month?: "); scanf ("%d", &month); dow = dayofweek(year, month); dim = daysinmonth(year, month); showcal(dow, dim); return 0; } void showcal (int dow, int days) { int i, j, d; printf ("Su Mo Tu We Th Fr Sa\n"); d = 1; for (i = 0; i < dow; i++) { printf (" "); } for (; i < 7; i++) { printf (" %d ", d); d++; } printf("\n"); for (j = 0; d <= days; j++) { for (i = 0; i < 7 && d <= days; i++) { if (d < 10) printf (" %d ", d); else printf ("%d ", d); d++; } printf("\n"); } } int daysinmonth( int year, int month) { int dim; dim = 31; if (month == 4 || month == 6 || month == 9 || month == 11) dim = 30; if (month == 2) { if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) dim = 29; else dim = 28; } return dim; } int daysinyear( int year) { int diy; if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) diy = 366; else diy = 365; return diy; } int dayofweek (int year, int month) { int dow; int days; int y, m; if (year >= 2000) { days = 0; for ( y = 2000; y < year; y++ ) { days = days + daysinyear(y); } for ( m = 1; m < month; m++ ) { days = days + daysinmonth(year, m); } dow = (6 + days) % 7; } else { days = 0; for ( m = month; m <= 12; m++ ) { days = days + daysinmo

  • Java 日付の加算がうまくいきません。。どなたか助けてください・・・

    初歩的質問で申し訳ないのですが、ご存知の方ご教授ください。日付の加算についてどうしてもわからない箇所があります。 Calendar cal= Calendar.getInstance((TimeZone.getTimeZone("GMT"))); int year = 2007; int month = 1; int day = 1; cal.set(year,month,day); cal.add(Calendar.DAY_OF_MONTH,100); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); String tempDate=sdf.format(date); tempDate=2007/05/12 私が求めている結果は tempDate=2007/4/11 なのですが、tempDate=2007/05/12になってしまいます。 お願いします。 環境:WinXp pro Eclipse 3.1 JDK 1.4.2 2007/4/11は Oracle8i の実行結果です。 select to_date('2007-01-01') +100 from dual

    • ベストアンサー
    • Java
  • C言語 実行エラー 10000日先が表示されない 

    今10000日先後の年、月、日を求めていて下のプログラムを 考えたんですけど、コンパイルは通るんですが結果がうまくいきません↓ どこがおかしいですか? #include<stdio.h> int leapYear(int); int Date(int,int,int,int); int main(void){ int year,i=0,month,date,date2=10000,emp=0; printf("年>>"); scanf("%d",&year); printf("月>>"); scanf("%d",&month); printf("日>>"); scanf("%d",&date); Date(year,month,date,date2);//date2から各月の日数を引いていく printf("year=%d month=%d date=%d date2=%d \n",year,month,date,date2); return 0; } int leapYear(int year){ //うるう年を求める if(year%400==0){ return 1; } else if(year%4==0 && year%100!=0){ return 1; } else return 0; } int Date(int y,int m,int d,int d2){ for(;;y++){ if(d2<0) return y,m,d,d2; for(;m<=12 || d2>=0;m++){ if(leapYear(y)==1){ if(m==4||m==6||m==9||m==11){ d2-(30-d); } else if(m==2) d2-(29-d); else d2-(31-d); } else if(m==4||m==6||m==9||m==11){ d2-(30-d); } else if(m==2) d2-(28-d); else d2-(31-d); } } }

  • 日付取得

    ある変数に$year='2003', $month='1', $day='5' となっている場合 配列$dateに '2003/1/5' '2003/1/4' '2003/1/3' '2003/1/2' '2003/1/1' '2002/12/31' '2002/12/30'とデータを取得したいです。 また $year='2003', $month='1', $day='' の場合は '2003/1' '2002/12' '2002/11' '2002/10' '2002/9' '2002/8' '2002/7' と取得したいのですが どのようにすればよろしいのでしょうか? すみませんが宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • C言語で3次元配列を使い一年分のカレンダーを作成

    C言語課題で「三次元配列を定義して、与えられた年の1年間分のカレンダーを作成する」という課題があるのですが三次元配列を使い一年分のカレンダーがなかなか出来ません。 教えていただけるとありがたいです。 どうかよろしくお願いします!!!! 現状はこの状態です。 #pragma warning(disable:4996) #include <stdio.h> #define WEEK 6 enum M_LIST { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, N_MONTH }; enum W_LIST { SUN, MON, TUE, WED, THU, FRI, SAT, N_WEEK }; char *weekday[] = { "日,月,火,水,木,金,土" }; //曜日 int mday[] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; //各月の日数 /*プロトタイプ宣言*/ int monthday(int year); void karenda(int total); /*メイン*/ void main(void) { int year; printf("西暦を出力"); scanf("%d", &year); //年度の出力 karenda(monthday(year)); } /*求める月の前月までの総日数*/ int monthday(int year) { int total = 0; /*求める年の前年までの総日数を求める*/ total = (((year - 1) * 365) + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + 1); /*うるう年の日数*/ if ((year % 4) == 0 && (year % 100) != 0 && (year % 400) == 0)mday[FEB] = 29; { } return total; } /*カレンダー*/ void karenda(int total) { int month, week, day; int box = total % 7; char cal[N_MONTH][WEEK][N_WEEK]; //3次元配列の宣言 for (month = 0; month < N_MONTH; month++) { printf("%d\n", (month + 1)); //月を入力 for (week = 0; week < WEEK; week++) { for (day = 0; day < N_WEEK; day++) { if (day < box){ printf(" "); } } } } } よろしくお願いします。

  • 万年カレンダで祝日にマークを付けるには

    祝日に関して、下記の通りプログラムを作ったのですがうまくいきません。ご教授お願いします。 void Display_func( int year , int month ) {   int week , i , leap , day , *shuku , *furikae ;   int days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};   int d = 0; **省略**   for( i=0 ; i<week ; i++ ){      printf(" ");   }   for(day=1 ; day<=days[month] ; day++ ){ ★★Yasumi_func( int &shuku , int &furikae ); /*祝日判定関数*/   if(i==0){     printf(" @%2d",day);   }else if(i==*shuku){      printf(" #%2d",day);   }else if(i==*furikae){     i = 1;     printf(" &%2d",day+1);   }else if(i==6){     printf(" *%2d",day);   }else{     printf(" %2d",day);   } 略 @:日曜日 *:土曜日 &:振替休日 #:祝日 return; } /* 祝日判定関数 */ void Yasumi_func( int *yshuku , int *furikae ) { int year , month , day , i ; if((month==3 && day== (int)(20.8431 + 0.242194*(year-1980) - (year-1980)/4))   || (month==1 && day>7 && day<15 && i==1) 略   || (month==11 && day==3)   || (month==12 && day==23))   {     if(i == 0){       *furikae = i ;      /* 振替休日 */     }else{       *shuku = i; /* 祝日 */     }   } }   Yasumi_func( int &yasumi , int &kae ); 祝日判定関数を呼びたいのですが「式の構文エラー」となってしまいます。 この他   if(i == 0){     *furikae = i ;   }else{     *shuku = i;   } この部分も自信がないので、アドバイスお願いいたします

  • 配列の頭に要素を挿入する方法

    初心者です。配列でご教授お願いします。 インデックス0からひとつずつ要素をずらして、配列の一番前に要素を挿入するにはどうしたらいいのでしょうか? int[] a = new int[10]; int n = a.length; for (int i = n-1; i < 1; i--){ a[i] = a[i-1]; } a[0] = 新しい要素 といった感じで書いたのですが、どうもループの中が実行されていないようなのです。 よろしくお願いいたします。

  • javaでカレンダー作成

    西暦年号・月を入力して、その月のカレンダーを出力するというものです。 <処理例> 指定日のカレンダーを出力します。 西暦年を入力:2007 月を入力:6 日 月 火 水 木 金 土 ______________________1____2 _3___4___5___6___7___8___9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 というものを出力したいです。下線は何もないという意味です。(見にくかったらすみません) 一応途中のプログラム載せます。 ~~~の部分を教えてください。 お願いします。 import java.io.*; public class Ex01a{ public static void main ( String[] args ) throws IOException{ int year, month, day, i, youbiNum=0; String ss; BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in)); System.out.println("指定月のカレンダーを出力します"); System.out.print("西暦年を入力:"); ss = kbd.readLine(); year = getInt(ss); System.out.print("月を入力:"); ss = kbd.readLine(); month = getInt(ss); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ day = 1; youbiNum=getyoubi(year,month,day); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } public static void printCal(int maxDay, int youbiNum){ int cal[] = new int[43]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public static int getyoubi(int year, int month, int day){ int youbiNum, y1, nissuu=0; y1 = year-1; nissuu += y1 + y1/4 - y1/100 + y1/400+getJulian(year, month, day); youbiNum = nissuu % 7; return youbiNum; } public static int getJulian(int year, int month, int day){ int julian; julian = day; while(--month > 0){ julian+=getDay(year,month); } return julian; } public static int getDay(int year, int month){ int mmdd[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int mmdd_day; mmdd[2] += uruu(year); mmdd_day = mmdd[month]; return mmdd_day; } public static int getInt(String ss){ try{ return Integer.parseInt(ss); } catch(Exception e){ return 0; } } public static int uruu(int yy){ if(yy%4==0 && yy%100!=0 || yy%400==0) return 1; else return 0; } }

  • str メンバ関数について

    str メンバ関数について 下記のstring Date::to_string() const のstr()メンバ関数が日付クラスDate、 (インタフエース部、実装部)に定義等が記入されていないので、何処に定義されているか教えてください。 ************************************************************* // 日付クラスDate(第2版:実装部) #include <ctime> #include <sstream> #include <iostream> #include "Date.h" using namespace std; //--- 文字列表現を返却 ---// string Date::to_string() const { ostringstream s; s << year << "年" << month << "月" << day << "日"; return s.str(); } ****************************************************************** // 日付クラスDate(第2版:インタフェース部) #include <string> #include <iostream> using namespace std; class Date { int year; // 西暦年 int month; // 月 int day; // 日 public: Date(); // デフォルトコンストラクタ Date(int y, int m = 1, int d = 1); // コンストラクタ int Year() const { return year; } // 年を返却 int Month() const { return month; } // 月を返却 int Day() const { return day; } // 日を返却 string to_string() const; // 文字列表現を返却 }; ostream& operator<<(ostream& s, const Date& x); // 挿入子

  • 引数で指定された配列の要素数の取得

    どうもこんにちは。 C言語でプログラムを作成しています。 ある関数に配列を渡すことを考えていますが、渡した配列の要素数を取得する方法は何かありますか? 標準の関数を見ても、配列の先頭アドレスのポインタとともに、配列の要素数を渡しているものばかりで、配列のポインタを渡しているものは見かけません。 要素数があらかじめわかっていれば、それを引数の型に指定できますが、呼び出されるまで不明な場合はうまくいきません。 配列の要素数も引数として一緒に渡す必要がありますか? [作ってみたサンプル] #include <stdio.h> #include <stdlib.h> #include <string.h> // func1 と func2 をまとめられないだろうか。。。 void func1(int (*p)[10]) { ________int n = sizeof(*p) / sizeof((*p)[0]); ________int i; ________for (i = 0; i < n; i++) { ________________printf("%d\n", (*p)[i]); ________} ________printf("\n"); } void func2(int (*p)[5]) { ________int n = sizeof(*p) / sizeof((*p)[0]); ________int i; ________for (i = 0; i < n; i++) { ________________printf("%d\n", (*p)[i]); ________} ________printf("\n"); } int main(int argc, char *argv[]) { ________int ary1[10] = { 2, 4, 6, 8, 0, 1, 3, 5, 7, 9 }; ________int ary2[5] = { 3, 6, 9, 12, 15 }; ________func1(&ary1); ________func2(&ary2); ________return 0; }