みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

元旦からの経過日数を求めたい

元旦から100日目、200日目を求めるプログラムを求めたいのですが、なにかすっきりまとめられることができなくて、うまくいきません。どうやったらいいでしょうか?アドバイスをお願いします。

投稿日時 - 2005-12-01 15:50:33

QNo.1813103

すぐに回答ほしいです

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

ミスが見つかりましたので訂正します。
1.うるう年に対応。
2.2月下旬の日数表示が間違っていた。

public class D100nichi{
public static void main(String[] args){

int y=Integer.parseInt(args[0]);
int DD=Integer.parseInt(args[1]);
int i=0;
int j=0;
String str1="00312831303130313130313031";
String str2="00312931303130313130313031";
String str="";

if((y%100)==0 && (y%400)==0){
str=str2;
}else if((y%4)!=0 || (y%4)==0 && (y%100)==0){
str=str1;
}else{
str=str2;
}

while (DD>j) {

DD=DD-j;
i=i+1;
j=Integer.parseInt(str.substring(i*2,i*2+2));
}
System.out.println(args[1]+"日は"+i+"月"+DD+"日");
}

}
今度は>java D100nichi 2005 100 のように入力して
下さい。

投稿日時 - 2005-12-02 21:54:49

お礼

返答が遅れてしまい申し訳ありません。
自分の知識の少なさでせっかく回答してもらったのに理解ができず、すべてをそれなりに勉強してやっと多少理解できたのでこの場を借りてお礼を言わせて頂きます。わざわざプログラムを作成して頂いたり、様々な命令文の例題を提示していただいてとても参考になりました。ありがとうございました。

投稿日時 - 2005-12-16 12:28:09

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

こんばんは~!!(^^♪

java.util.Calendarクラスを使用することをおすすめします。

import java.util.*;

public class NewYear {

public static void main(String[] args){

Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_YEAR, Integer.parseInt(args[0]));

System.out.println(cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DATE));
}
}

こんな感じでコンパイルしコマンドラインから
java NewYear 100 ← 何日目かを入力する
-> 2005/4/10 と出力されます。

ちなみにアドバイスですが、No.5の人のソースで行くと2月などはうるう年の場合もあるのでおかしくなってしまうと思いますよ。

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Calendar.html

投稿日時 - 2005-12-02 00:51:15

ANo.5

取り敢えず完成しました。args[0]を使ってますので
コンパイル後には >java D100nichi 100
の様に0から364の数字を入力してください。

public class D100nichi{
public static void main(String[] args){

String str="312831303130313130313031";
int DD=Integer.parseInt(args[0]);
int i=0;
int j=0;

if(DD>31){
while (DD>j) {
j=Integer.parseInt(str.substring(i*2,i*2+2));
DD=DD-j;
i=i+1;
}
i=i+1;
System.out.println(args[0]+"日は"+i+"月"+DD+"日");
}
else{
System.out.println(args[0]+"日は"+1+"月"+DD+"日");
}

}
}

投稿日時 - 2005-12-01 21:23:29

ANo.4

元旦からの日数ならCalendar.set()メソッドで簡単に求められます。

Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_YEAR, 100);

100日目ならこんな感じです。

投稿日時 - 2005-12-01 19:20:48

ANo.3

タイトルのように経過日数を求めるのなら、#1の方のとおりでよいと思いますが、
質問内容を見ると経過日数ではなく、日付に足し算したいように読めますので、その方法です。
100日ではなく、1ヶ月とか1年とかすることや、
負の値を加算することで、減算することもできます。


Calendar cal = Calendar.getInstance();
cal.set(2005, 0, 1);//2005年の元旦(月が0からなので注意)
cal.add(Calendar.DATE, 100);//100日プラス

//Date型で取得
Date d = cal.getTime();
System.out.println(d);

//文字列(yyyy-MM-dd形式で取得)
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(fmt.format(d));

投稿日時 - 2005-12-01 17:10:54

ANo.2

まだ途中の欠陥プログラムですが参考に。
public class D100nichi{
public static void main(String[] args){

String str="312831303130313130313031";
int DD=100-1;
int i=0;
while (DD>31) {
i=i+1;
DD=DD-Integer.parseInt(str.substring(i*2,i*2+2));
}
i=i+1;
System.out.println("100日は"+i+"月"+DD+"日");

}
}

投稿日時 - 2005-12-01 17:06:44

ANo.1

CalendarやDateで1970年元旦からの通算ミリ秒は取得できます。
これを使って、知りたい日とその年の元旦の差分をミリ秒単位で得て、一日のミリ秒数(1000*60*60*24)で割れば日数が得られるでしょう。

投稿日時 - 2005-12-01 16:11:12

あなたにオススメの質問