tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:有効時間の判定

時間型の判定処理をやりたかったのですが、標準のメソッドでは実装されていないようなので自作してみました。対象の時間が開始時間から終了時間の間に入っている場合は対象としてTrueを返し、それ以外は対象外としてFalseを返す処理です。

検証はテストクラスで確認してみました。検証方法はこれで大丈夫だと思う。一応ログインユーザの地域をUSにしてテストし、正常に実行されたので別地域のユーザでも問題なく動作すると思います。


クラス

/*
 * 有効時間の判定
 * @param	: 今の時間	[prmNowTime]
 * @param	: 開始時間	[prmStartTime]
 * @param	: 終了時間	[prmEndTime]
 * @return	: 判定結果
 */
public static Boolean isActiveTime(Time prmNowTime, Time prmStartTime, Time prmEndTime) {
	
	if (prmStartTime > prmNowTime) {
		return false;
	} else if(prmEndTime < prmNowTime) {
		return false;
	}
	
	return true;
}


テストクラス

/*
 * 有効時間判定・テスト
 */
static testMethod void isActiveTimeTest() {
	System.debug('◆◆◆◆isActiveTimeTest:START');
	
	// 開始時間
	Time startTime = Time.newInstance(9, 0, 0, 0);
	System.assertEquals('09:00:00.000Z', String.valueOf(startTime));
	// 終了時間
	Time endTime = Time.newInstance(18, 0, 0, 0);
	System.assertEquals('18:00:00.000Z', String.valueOf(endTime));
	
	// 現在時間
	Time nowTime = null;
	System.assertEquals(nowTime, null);
	
	Boolean result = false;
	
	// 開始時間前
	nowTime = startTime.addSeconds(-1);
	System.assertEquals('08:59:59.000Z', String.valueOf(nowTime));
	result = CommonDate.isActiveTime(nowTime, startTime, endTime);
	System.assertEquals(result, false);
	
	// 開始時間と一致
	nowTime = startTime;
	System.assertEquals('09:00:00.000Z', String.valueOf(nowTime));
	result = CommonDate.isActiveTime(nowTime, startTime, endTime);
	System.assertEquals(result, true);
	
	// 開始時間後
	nowTime = startTime.addSeconds(1);
	System.assertEquals('09:00:01.000Z', String.valueOf(nowTime));
	result = CommonDate.isActiveTime(nowTime, startTime, endTime);
	System.assertEquals(result, true);
	
	// 終了時間前
	nowTime = endTime.addSeconds(-1);
	System.assertEquals('17:59:59.000Z', String.valueOf(nowTime));
	result = CommonDate.isActiveTime(nowTime, startTime, endTime);
	System.assertEquals(result, true);
	
	// 終了時間と一致
	nowTime = endTime;
	System.assertEquals('18:00:00.000Z', String.valueOf(nowTime));
	result = CommonDate.isActiveTime(nowTime, startTime, endTime);
	System.assertEquals(result, true);
	
	// 終了時間後
	nowTime = endTime.addSeconds(1);
	System.assertEquals('18:00:01.000Z', String.valueOf(nowTime));
	result = CommonDate.isActiveTime(nowTime, startTime, endTime);
	System.assertEquals(result, false);
	
	System.debug('◆◆◆◆isActiveTimeTest:END');
}