ロゴ

プログラミング初心者がアプリ開発を目指すブログ

Javaの日時に関する機能を使いこなしましょう – Javaでデスクトップトップアプリ(予定&ToDo管理)を作る-006

今回から、アプリの内部を作っていきます。

スケジュールを管理する上で一番大切なことはなんでしょうか?
それは、日付と時間です。
ということで、日付と時間を司る部分を作っていきます。

Javaで日時を管理する時には、Calendarクラスを利用します。
まずは、Calendarクラスをimportして、Calendar.getInstance()でインスタンスを取り出します。
import java.util.Calendar
Calendar today = Calendar.getInstance();

これで、todayに現在の時刻の情報が入りました。
情報を取り出すには、

today.get(Calendar.YEAR);//年の情報を取り出す
today.get(Calendar.MONTH);//月の情報を取り出す、値は0 ~ 11になるので注意が必要
today.get(Calendar.DATE);//日付の情報を取り出す
today.get(Calendar.DAY_OF_WEEK)//曜日の情報を取り出す
today.get(Calendar.HOUR_OF_DAY);//時を取り出す、24時間制
today.get(Calendar.MINUTE);//分を取り出す
today.get(Calendar.SECOND);//秒を取り出す
today.get(Calendar.WEEK_OF_YEAR)//年の何週目かを取り出す

日付をセットするには、getに似た感じで
today.set(Calendar.YEAR,new_year);//年の情報をnew_yearに書き換える

また、
today.set(year,month,day);
today.set(year,month,day,hourOfDay,minute);
と書くこともできます。monthの値に注意しましょう。

というわけで、Calendarクラスを使って、日時の情報を保持しておくDateクラスを作ります。

[Date.java]


public class Date{
	private int year;
	private int month;
	private int date;
	private int hour;
	private int minute;
	private int week;

	Date(int y,int m,int d){
		this.year = y;
		this.month=m;
		this.date=d;
		Calendar cal = Calendar.getInstance();
		cal.set(y,m-1,d);
		this.week=cal.get(Calendar.WEEK_OF_YEAR);
	}
	Date(int y,int mon,int d,int h,int min){
		this.year = y;
		this.month=mon;
		this.date=d;
		this.hour=h;
		this.minute=min;
		Calendar cal = Calendar.getInstance();
		cal.set(y,mon-1,d);
		this.week=cal.get(Calendar.WEEK_OF_YEAR);
	}
	
	public int getYear(){return this.year; }
	public int getMonth(){return this.month; }
	public int getDate(){return this.date; }
	public int getHour(){return this.hour;}
	public int getMinute(){return this.minute;}
	public void setDate(int y,int m,int d){
		Calendar calendar = Calendar.getInstance();
        calendar.set(y,m-1,d);
		this.year=calendar.get(Calendar.YEAR);		
		this.month=calendar.get(Calendar.MONTH)+1;		
		this.date=calendar.get(Calendar.DATE);
		this.week=calendar.get(Calendar.WEEK_OF_YEAR);
	}
	public void setDate(int y,int mon,int d,int h,int min){
		Calendar calendar = Calendar.getInstance();
       calendar.set(y,mon-1,d,h,min);
		this.year=calendar.get(Calendar.YEAR);		
		this.month=calendar.get(Calendar.MONTH)+1;		
		this.date=calendar.get(Calendar.DATE);		
		this.hour=calendar.get(Calendar.HOUR_OF_DAY);		
		this.minute=calendar.get(Calendar.MINUTE);
		this.week=calendar.get(Calendar.WEEK_OF_YEAR);
	}
	/*年月日が一致するか比較する、比較されたくない場合は-1を入れる*/
	public boolean match(int y,int m,int d){
		if(d==-1 && m ==-1){
			if((this.year==y)){return true;}
			else{return false;}	
		}else if(d==-1){
			if((this.year==y) && (this.month==m)){return true;}
			else{return false;}	
		}else{
			if((this.year==y) && (this.month==m) && (this.date==d)){return true;}
			else{return false;
			}	
		}
	}
	
	/*週が一致するか*/
	public boolean matchWeek(int y,int m,int d){
		Calendar cal2 = Calendar.getInstance();
		cal2.set(y,m-1,d);
		if((this.week)==(cal2.get(Calendar.WEEK_OF_YEAR))){return true;}
		else{return false;}
	}
}

日時の情報をあえて持ちたくない時のために、コンストラクタやメソッドをオーバーロードしています。
この辺は将来的に設計変更を行うかもしれません。
タスクの検索を行うときのためにmatchメッソドを書いていますが、あまり賢いやり方ではないですね。

テストしてみます。

[CalTest.java]


import java.util.Calendar;

public class CalTest{
	public static void main(String[] args){
		Calendar calendar = Calendar.getInstance();
		int year =calendar.get(Calendar.YEAR);
		int month =calendar.get(Calendar.MONTH)+1;
		int date =calendar.get(Calendar.DATE);
		Date today = new Date(year,month,date);
		System.out.println("今日の日付"+today.getYear()+"年"+
                today.getMonth()+"月"+today.getDate()+"日");
		today.setDate(2016,2,23);
		System.out.println("2016/2/23にセット");
		System.out.println("実行結果"+today.getYear()+"年"+
                today.getMonth()+"月"+today.getDate()+"日");
		today.setDate(2016,2,29,13,0);
         	today.setDate((today.getYear()),(today.getMonth()),
                (today.getDate()),(today.getHour()+13),(today.getMinute()));
                System.out.println("2016/2/29/13:00の13時間後");
		System.out.println("実行結果"
                +today.getYear()+"年"+today.getMonth()+"月"+today.getDate()+"日"+
                today.getHour()+"時"+today.getMinute()+"分");
		System.out.println(today.match(2016,-1,-1));//2016年か?true
		System.out.println(today.match(2016,4,-1));//2016年4月か?false
		System.out.println(today.matchWeek(2016,3,3));
                //2016年3月3日は同じ週か?true
		System.out.println(today.matchWeek(2016,3,9));
                 //2016年3月9日は同じ週か?false
	}
}

[実行結果]
Javaで日時に関するクラスを使う
うまく動きました。
ということで今日はこのへんで。

アプリ開発記の次の記事はこちら => 核となるクラスを設計しましょう – Javaでデスクトップトップアプリ(予定&ToDo管理)を作る-007

スポンサード リンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA