プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (7件)

ミスが見つかりましたので訂正します。


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 のように入力して
下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/12/16 12:28

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



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

取り敢えず完成しました。

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+"日");
}

}
}
    • good
    • 0

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



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

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

タイトルのように経過日数を求めるのなら、#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));
    • good
    • 0

まだ途中の欠陥プログラムですが参考に。


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+"日");

}
}
    • good
    • 0

CalendarやDateで1970年元旦からの通算ミリ秒は取得できます。


これを使って、知りたい日とその年の元旦の差分をミリ秒単位で得て、一日のミリ秒数(1000*60*60*24)で割れば日数が得られるでしょう。
    • good
    • 0

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