重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

java勉強中の初心者です。
引数で値を受け取り、英語表記の曜日メソッドを定義して
main()メソッドから呼び出します。この時に、戻り値を
表示する際に日本語に変換して表示を行う時にはどうしたらよいか
教えていただけますか?
-------------------------------------------------
入力ストリームでの入力値:20061110
実行結果:2006/11/10は木曜日です
-------------------------------------------------
import java.io.*;

import java.util.*;

public class Sample {
public static void main(String args[])throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String s = br.readLine();

int n = Integer.parseInt(s);

dispDayOfWeek(n);

}

static void dispDayOfWeek(int a){

Calendar time = new GregorianCalendar();

int y = time.get(time.YEAR);
int m = time.get(time.MONTH) + 1;
int d = time.get(time.DATE);

//System.out.println( y + "/" + m + "/" + d + "は" + "です");
}
}
------------------------------------------------------------
このような感じでなんとなくはつかめてはいると
思うのですが、よろしくお願いします。

A 回答 (7件)

実現したいことが分かりました。


このような感じでしょうか?
==================================================
import java.io.*;
import java.text.*;
import java.util.*;

public class Sample {

public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String usrDate = br.readLine(); // ユーザ入力日付
br.close(); // リーダを閉じる

Calendar cal = Calendar.getInstance(); // 現在日時
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); // フォーマッタ
Date date = sdf.parse(usrDate); // ユーザ入力日付解析
cal.setTime(date); // ユーザが入力した日付に更新

int weekNum = cal.get(cal.DAY_OF_WEEK); // 曜日
String week = null; // 曜日文字列
switch(weekNum) {
case(Calendar.SUNDAY) : week = "SUNDAY"; break;
case(Calendar.MONDAY) : week = "MONDAY"; break;
case(Calendar.TUESDAY) : week = "TUESDAY"; break;
case(Calendar.WEDNESDAY) : week = "WEDNESDAY"; break;
case(Calendar.THURSDAY) : week = "THURSDAY"; break;
case(Calendar.FRIDAY) : week = "FRIDAY"; break;
case(Calendar.SATURDAY) : week = "SATURDAY"; break;
}

sdf.applyPattern("yyyy/MM/dd"); // フォーマッタのパターンを変更
String changedUsrDate = sdf.format(date); // ユーザ入力日付を文字列にフォーマット
Sample.dispDayOfWeek(changedUsrDate, week);
}

static void dispDayOfWeek(String dateStr,String dayOfWeek) {
System.out.println(dateStr + "は" + dayOfWeek + "です");
}

}
==================================================
ユーザが入力した文字列をそのままdispDayOfWeekメソッドに渡していたので、入力したままの状態で表示されていました。
dispDayOfWeekメソッド呼出し前の2行で、Dateオブジェクトから文字列(YYYY/MM/DD)に変換しています。

※変数名などを変更してあります
    • good
    • 0
この回答へのお礼

何度もありがとうございました。

これで解決しました。

まだまだ勉強中でまたお世話になると

思いますがよろしくお願いします。

お礼日時:2006/11/15 01:01

こんばんは。


> 20061101という風に数字だけを入力した
> 実行結果が
>
> 2006/11/01はWEDNESDAYです
>
> としたいのですが・・・
ANo.5の後半が回答になっています。

この回答への補足

何度も申し訳ございません。
なぜか実行結果が

>20061114
>20061114はTUESDAYです

となってしまいます。
なぜでしょうか?原因がわかりません。

以下ソースになります。

-------------------------------------------------------

import java.io.*;
import java.text.*;
import java.util.*;

public class m8_3 {

public static void main(String args[])throws Exception{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String s = br.readLine();

Calendar cl = Calendar.getInstance();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd");
Date date = sdf.parse(s);
cl.setTime(date);

cl.get(cl.DATE);

int y = cl.get(cl.DAY_OF_WEEK);

String week = null;

switch(y) {

case(Calendar.SUNDAY) : week = "SUNDAY"; break;
case(Calendar.MONDAY) : week = "MONDAY"; break;
case(Calendar.TUESDAY) : week = "TUESDAY"; break;
case(Calendar.WEDNESDAY) : week = "WEDNESDAY"; break;
case(Calendar.THURSDAY) : week = "THURSDAY"; break;
case(Calendar.FRIDAY) : week = "FRIDAY"; break;
case(Calendar.SATURDAY) : week = "SATURDAY"; break;
}

dispDayOfWeek(s,week);

}

static void dispDayOfWeek(String a,String b)
{

System.out.println(a + "は" +b + "です");
}
}
--------------------------------------------------------

補足日時:2006/11/14 22:01
    • good
    • 0

こんばんは。

私の環境では、最終的なコードで正常に動いています。

> C:\Documents and Settings\koki_m\デスクトップ>java Sample
> 2006/11/01
> 2006/11/01はWEDNESDAYです

指定したフォーマットに従っていない入力の場合は、実行時例外が発生します。もし「20061114」のように入力させたい場合は、
> new java.text.SimpleDateFormat("yyyy/MM/dd");

new java.text.SimpleDateFormat("yyyyMMdd");
のようにしてください。

この回答への補足

毎回、すぐのご回答ありがとうございます。
koki_mさまのご回答を拝見しますと
起動引数に
> 2006/11/01
と最初から「/」がありますよね?

起動引数を
20061101という風に数字だけを入力した
実行結果が

2006/11/01はWEDNESDAYです

としたいのですが・・・
何度も申し訳ございませんが
よろしくお願いします。

補足日時:2006/11/14 01:18
    • good
    • 0

問題の箇所はこちらです。


> Calendar cl = Calendar.getInstance();
これだと現在の日時でCalendarオブジェクトを取得しているだけです。
clを、入力した日付に更新してあげる必要があります。

Calendar cl = Calendar.getInstance();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd"); // フォーマッタ
Date date = sdf.parse(s);
cl.setTime(date);

このような感じでうまくいくと思います。
また、同じ機能を実現するには下のような方法もあります。
==================================================
import java.text.*;
import java.util.*;

public class Sample {
public static void main(String[] args) throws Exception {
if(args.length != 1) { // エラー処理
System.out.println("起動引数で日付を指定して下さい\n例:java Sample 20061113");
System.exit(1);
}

// 入力文字列を解析して日付オブジェクトを作成
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.US); // 曜日を英語表記とする場合
Date date = sdf.parse(args[0]);

// フォーマッタの表示方法を変更した後、曜日も含めて出力
sdf.applyPattern("yyyy年MM月dd日はEEEEです");
System.out.println(sdf.format(date));
}
}

この回答への補足

早速の回答ありがとうございます。
すごく助かります。
なぜか指定した箇所でエラーが発生しています。
入力ストリームを使用し手入力した値を処理するので
なかなかそのあたりがうまくいきません。
何度もすいませんがよろしくお願いします。
ーーーーーーーーーーーーーーーーーーーーーーーーー

public class Sample {

public static void main(String args[])throws Exception{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String s = br.readLine();

Calendar cl = Calendar.getInstance();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy/MM/dd");
Date date = sdf.parse(s);

//↑ ↑この部分でエラーがでてしまいました。

cl.setTime(date);

int y = cl.get(cl.DAY_OF_WEEK);

String week = null;

switch(y) {

case(Calendar.SUNDAY) : week = "SUNDAY"; break;
case(Calendar.MONDAY) : week = "MONDAY"; break;
case(Calendar.TUESDAY) : week = "TUESDAY"; break;
case(Calendar.WEDNESDAY) : week = "WEDNESDAY"; break;
case(Calendar.THURSDAY) : week = "THURSDAY"; break;
case(Calendar.FRIDAY) : week = "FRIDAY"; break;
case(Calendar.SATURDAY) : week = "SATURDAY"; break;
}

dispDayOfWeek(s,week);

}

static void dispDayOfWeek(String a,String b)
{

System.out.println(a + "は" +b + "です");
}
}

ーーーーーーーーーーーーーーーーーーーーーーーーー

補足日時:2006/11/13 22:30
    • good
    • 0

a = cl.get(cl.YEAR) + "/"+ cl.get(cl.MONTH ) +1 + "/"+ cl.get(cl.DATE);



a = cl.get(cl.YEAR) + "/"+ (cl.get(cl.MONTH ) +1) + "/"+ cl.get(cl.DATE);
こうですね。
数値の演算をしたいところが文字列の演算に巻き込まれてしまっています。
なので括弧で囲んで先に数値の演算をさせてあげてください。

この回答への補足

koki_mさん、何度もご回答ありがとうございます。
申し訳ないのですが、私の認識不足で問題の趣旨が
間違えておりました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
import java.io.*;
import java.util.*;

public class Sample {

public static void main(String args[])throws IOException{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String s = br.readLine();

Calendar cl = Calendar.getInstance();

s = cl.get(cl.YEAR) + "/"+ (cl.get(cl.MONTH ) +1) + "/"+ cl.get(cl.DATE);
//↑ ↑ ここがわかりません
int y = cl.get(cl.DAY_OF_WEEK);

String week = null;

switch(y) {

case(Calendar.SUNDAY) : week = "SUNDAY"; break;
case(Calendar.MONDAY) : week = "MONDAY"; break;
case(Calendar.TUESDAY) : week = "TUESDAY"; break;
case(Calendar.WEDNESDAY) : week = "WEDNESDAY"; break;
case(Calendar.THURSDAY) : week = "THURSDAY"; break;
case(Calendar.FRIDAY) : week = "FRIDAY"; break;
case(Calendar.SATURDAY) : week = "SATURDAY"; break;
}

dispDayOfWeek(s,week);

}

static void dispDayOfWeek(String a,String b)
{

System.out.println(a + "は"+ b +"です");
}
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
上記のようなソースを書いたのですが、これだと
入力値:「20061114」と起動引数を入力しても
「2006/11/13はMONDAYです」と表示されてしまいます。
起動引数に合った日付を「yyyy/mm/dd」方式で
表示するにはどうしたらよいですか?
何度も申し訳ございませんがよろしくお願いします。

補足日時:2006/11/13 19:08
    • good
    • 0

こんにちは。

ANo.1に載せた参考URLのサンプルではSwitch文で曜日を判定しています。
どうしても配列でマッピングしたい理由とかがあるのでしょうか?

曜日は日~土の順番でint値1~7が割り当てられているようです。
Calendarクラスの定数(Calendar.SUNDAYやCalendar.MONDAYなど)の実数値がJavaのバージョンアップによって変更されるということはおそらくないと思いますが、100%ないとは言えません。
ですので、あくまでも dow == 1 が "Sunday"とするのではなく、dow == Calendar.SUNDAY が "Sunday"とするべきです。

下のようにSwitch文で判定するべきだと思いますよ。
==================================================
//String week[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
String week = null;
switch(dow) {
case(Calendar.SUNDAY) : week = "Sunday"; break;
case(Calendar.MONDAY) : week = "Monday"; break;
// という感じ
}
System.out.println(a + "は"+ week +"です");
==================================================

この回答への補足

koki_m様、ありがとうございます。
特に配列にする理由はありませんでしたので
Switch文の方がわかりやすいですね。

ただ、最後に前回も記述をしたのですが「月」
の表示がうまくいきません・・・・
"cl.get(cl.MONTH ) +1"だと実行結果が

"2006/101/12はSundayです"

となってしまいます。

この点だけ最後にご教授お願いできますか?
よろしくお願いします。

static void dispDayOfWeek(String a)
{
Calendar cl = Calendar.getInstance();

a = cl.get(cl.YEAR) + "/"+ cl.get(cl.MONTH ) +1 + "/"+ cl.get(cl.DATE);

int y = cl.get(cl.DAY_OF_WEEK);

String week = null;

switch(y) {
case(Calendar.SUNDAY) : week = "Sunday"; break;
case(Calendar.MONDAY) : week = "Monday"; break;
case(Calendar.TUESDAY) : week = "Tuesday"; break;
case(Calendar.WEDNESDAY) : week = "Wednesday"; break;
case(Calendar.THURSDAY) : week = "Thursday"; break;
case(Calendar.FRIDAY) : week = "Friday"; break;
case(Calendar.SATURDAY) : week = "Saturday"; break;
}
System.out.println(a + "は"+ week +"です");

}

}

補足日時:2006/11/12 13:42
    • good
    • 0

こんにちは。


Calendarオブジェクトは曜日をDAY_OF_WEEKというフィールドにint値で持っています。
ですので曜日取得方法は、
int dow = time.get(time.DAY_OF_WEEK); // DayOfWeek(曜日)
という感じになると思います。
数値であるdowを日本語に変換するには参考URLの「例2」が参考になると思います。

あと、このコードだとユーザーが入力した日付を使ってないみたいですね。

参考URL:http://www.javaroad.jp/java_date2.htm

この回答への補足

ご回答ありがとうございます。
koki_mさまのおかげで後もう少しです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
import java.io.*;
import java.text.DateFormat;
import java.util.*;

public class Sample {
public static void main(String args[])throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String s = br.readLine();

dispDayOfWeek(s);

}
static void dispDayOfWeek(String a)
{
Calendar time = Calendar.getInstance();

a = time.get(time.YEAR) + "/"+ time.get(time.MONTH )+1 + "/"+ time.get(time.DATE);

int dow = time.get(time.DAY_OF_WEEK); // DayOfWeek(曜日)

String week[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};


System.out.println(a + "は"+ week[dow]+"です");

}
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
これだと月の表示がユーザが入力した数字「20061112」が
「2006/101/12はTuesdayです」と表示されてしまいます。
調べたら「0」から始まるので「1」をプラスするみたい
なのですが、ここがどうしてもわかりません。

ご教授よろしくお願いします。

補足日時:2006/11/12 01:10
    • good
    • 0

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