03-日付を操ろう †日付を使ったプログラムを作ろうと思ったとき、 まぁ組もうと思ったら組めますが、 以下にある日の○日後の日付を返すプログラムを示します。 Java編 †Javaでは日付を扱うのに、java.util.Calendarクラスを使います。 ★ソース import java.util.Calendar;
import java.text.SimpleDateFormat;
public class CalendarTest{
public static void main(String args[]){
//表示用フォーマット
SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日(E)");
try{
//パラメータ取得
int year = Integer.parseInt(args[0]);
int month = Integer.parseInt(args[1])-1;
int day = Integer.parseInt(args[2]);
int num = Integer.parseInt(args[3]);
//カレンダーインスタンス作成
Calendar cal = Calendar.getInstance();
//こうすると変な日付を入れると例外を投げる
cal.setLenient(false);
//入力した日付を設定
cal.set(year, month, day);
System.out.println(df.format(cal.getTime()));
System.out.println(num+"日後は・・・");
//num日進める
cal.add(Calendar.DATE, num);
System.out.println(df.format(cal.getTime()));
}
//args[0],args[1]などから発生
catch(ArrayIndexOutOfBoundsException e){
System.out.println("引数が足りません。");
System.out.println("java CalendarTest <年> <月> <日> <何日後?>");
}
//Integer.parseInt()から発生
catch(NumberFormatException e){
System.out.println("パラメータは数字を入力してください。");
System.out.println("java CalendarTest <年> <月> <日> <何日後?>");
}
//Calendar.setから発生(たぶん)
catch(IllegalArgumentException e){
System.out.println("入力日付が正しくありません。");
}
//その他
catch(Exception e){
System.out.println("その他のエラー");
e.printStackTrace();
}
}
}
★実行結果 E:\Java\test>java CalendarTest 2003 2 29 1 入力日付が正しくありません。 E:\Java\test>java CalendarTest 2003 2 28 1 2003年02月28日(金) 1日後は・・・ 2003年03月01日(土) PHP編 †PHPはもっと簡単でmktimeにむりやりつっこんでやれば勝手に変換してくれます。 ★ソース <?php
function calendarTest($year, $month, $day, $num){
//日付チェック
if(!checkdate($month, $day, $year)){
echo('日付が正しくありません。<br>');
return;
}
//入力した日付作成
$date = mktime(0, 0, 0, $month, $day, $year);
echo(date('Y/m/d D', $date).'<br>');
echo($num.'日後は・・・<br>');
//num日進める
$date = mktime(0, 0, 0, $month, $day+$num, $year);
echo(date('Y/m/d D', $date).'<br>');
}
calendarTest(2003, 2, 29, 1);
echo('<br>');
calendarTest(2003, 2, 28, 1);
?>
★実行結果 日付が正しくありません。 2003/02/28 Fri 1日後は・・・ 2003/03/01 Sat ASP.NET編 †とってもJavaっぽくなりました。 ★ソース <html>
<script language="C#" runat="server">
private void BtExe_Click(object sender, EventArgs e){
try{
int year = Int32.Parse(TbYear.Text);
int month = Int32.Parse(TbMonth.Text);
int day = Int32.Parse(TbDay.Text);
int num = Int32.Parse(TbNum.Text);
DateTime dt = new DateTime(year, month, day);
dt = dt.AddDays(num);
//こんなんもアリですね。
//TimeSpan ts = new TimeSpan(num, 0, 0, 0);
//dt += ts;
LbRes.Text = dt.ToString("yyyy年MM月dd日(ddd)");
//Int32.Parseから発生
}catch(FormatException ex){
LbRes.Text = "数字を入力してください。";
//new DateTimeから発生
}catch(ArgumentOutOfRangeException ex){
LbRes.Text = "入力日付が正しくありません。";
}catch(Exception ex){
LbRes.Text = "その他のエラー (" + ex.Message + ")";
}
}
</script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>日付フォーマット</title>
</head>
<body>
<form runat="server">
<asp:TextBox id="TbYear" runat="server" width="40" MaxLength="4" style="text-align:right"/>年
<asp:TextBox id="TbMonth" runat="server" width="20" MaxLength="2" style="text-align:right"/>月
<asp:TextBox id="TbDay" runat="server" width="20" MaxLength="2" style="text-align:right"/>日の
<asp:TextBox id="TbNum" runat="server" width="50" MaxLength="10" style="text-align:right"/>日後は・・・
<asp:Button id="BtExe" runat="server" text="計算" onClick="BtExe_Click"/>
<asp:Label id="LbRes" runat="server" />
</form>
</body>
</html>
★実行結果 [2003]年[ 3]月[29]日の[ 1]日後・・・[計算] 入力日付が正しくありません。 [2003]年[ 3]月[28]日の[ 1]日後・・・[計算] 2003年03月01日(土) 感想・質問等どうぞ † |