/********************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JPCBatCNCommon
 *	ソースファイル名：JPCBatCNCommon.java
 *	作成者			：富士通
 *	日付			：2011年10月15日
 *＜機能概要＞
 *	コンテンツ決済用の日付取得部品を提供する。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/04/07	富士通		新規作成
 *
 ********************************************************************************/
package eo.business.common;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


/**
 * コンテンツ決済用のチェック処理を提供する。<p>
 * <br>
 * @author 富士通
 */
public class JCNBatDateUtil 
{
	
	/**
	 * 指定した日付に応じて下記の値を返却する。
	 * 1.指定した日付が日曜日以外の時は今週の月曜日と翌週の日曜日の日付を返却する。
	 * 2.指定した日付が日曜日の時は前週の月曜日と当日(日曜日)の日付を返却する。
	 * <br>
	 * @param value 指定した日付
	 * @return arrayList 処理対象日に対応した日付を 1.月曜日、2.日曜日の順番にString型で返す。
	 * @throws Exception 指定した日付にて、例外が発生した場合
	 */
	public static  ArrayList<String> getDayOfTheWeek(String value) throws Exception
	{
		// SimpleDateFormat格納用変数
		SimpleDateFormat sdfsunday = new SimpleDateFormat("yyyyMMdd");
		SimpleDateFormat sdfmonday = new SimpleDateFormat("yyyyMMdd");
		
		// 取得した年月日を年、月、日に分割しカレンダークラスに格納する。
		Calendar cl = new GregorianCalendar(Integer.parseInt(value.substring(0, 4)),
				(Integer.parseInt(value.substring(4, 6)) - 1),
				Integer.parseInt(value.substring(6, 8)));
		
		// 曜日をカレンダークラス中に保持しているフラグに置換する(日曜日:1 〜 土曜日:7)
		int week = cl.get(Calendar.DAY_OF_WEEK);
		
		// フラグが1(日曜日:1)以外の場合は翌週の日曜日を取得する。
		if(week > 1)
		{
			cl.add(Calendar.DAY_OF_YEAR, Calendar.SUNDAY - week + Calendar.DAY_OF_WEEK);
		}
		// フラグが1(日曜日:1)の場合は、当日の日曜日を取得する。
		else
		{
			cl.add(Calendar.DAY_OF_YEAR, Calendar.SUNDAY - week);
		}
		
		// 日曜日の日付を取得し、Date型→SimpleDateFormat型→String型の順に変換する。
		Date datesunday = cl.getTime();
		String sunday = String.valueOf(sdfsunday.format(datesunday));
		
		// 日曜日の日付を基に前週の月曜日の日付を取得
		week = cl.get(Calendar.DAY_OF_WEEK);
		cl.add(Calendar.DAY_OF_YEAR, -Calendar.SATURDAY + week);
		
		// 日曜から換算して前週の月曜日の日付を取得し、Date型→SimpleDateFormat型→String型の順に変換する。
		Date datemonday = cl.getTime();
		String monday = String.valueOf(sdfmonday.format(datemonday));
		
		// 月曜日、日曜日の日付をarrayListへ格納
		ArrayList<String> resultList = new  ArrayList<String>();
		resultList.add(monday);
		resultList.add(sunday);
		
		return resultList;
	}
}
