/*
 * MosP - Mind Open Source Project         http://www.mosp.jp/
 * Copyright (C) 1987-2009 MIND Co., Ltd.  http://www.e-mind.co.jp/
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
package jp.mosp.common.part;

import java.text.NumberFormat;

import jp.mosp.common.CommonConst;

/**
 * 時間、時刻に関するPartクラス
 * @author yoshida
 *	@version	0.0.2
 */
public class TimePart {

	/**
	 * int時刻の時間をString時に変換
	 * @param time
	 * @return	string	時間（時）
	 */
	public static String convIntegerTimeToStringHour(int time) {
		return String.valueOf(time / 60);
	}

	/**
	 * int時刻の分をString分に変換
	 * @param time
	 * @return	string	時間（分）
	 */
	public static String convIntegerTimeToStringMinutes(int time) {
		return String.valueOf(time % 60);
	}

	/**
	 * String時刻の時間をString時に変換
	 * @param time HH:MM
	 * @return HH
	 */
	public static String convStringTimeToStringHour(String time) {
		if (time.equals("")) {
			return "0";
		} else {
			return convIntegerTimeToStringHour(convStringTimeToIntegerTime(time));
		}
	}

	/**
	 * String時刻の分をString分に変換
	 * @param time HH:MM
	 * @return MM
	 */
	public static String convStringTimeToStringMinutes(String time) {
		if (time.equals("")) {
			return "0";
		} else {
			return convIntegerTimeToStringMinutes(convStringTimeToIntegerTime(time));
		}
	}

	/**
	 * 時刻変換（int→String）
	 * @param time int
	 * @return HH:MM
	 */
	public static String convIntegerTimeToStringTime(int time) {
		StringBuffer sb = new StringBuffer();
		sb.append(StringPart.addZero(convIntegerTimeToStringHour(time)));
		sb.append(CommonConst.STR_TIME_SEPARATOR);
		sb.append(StringPart.addZero(convIntegerTimeToStringMinutes(time)));
		return sb.toString();
	}

	/**
	 * 時刻変換（int→String）
	 * @param time int
	 * @return HH時MM分
	 */
	public static String convIntegerTimeToJPTime(int time) {
		StringBuffer sb = new StringBuffer();
		sb.append(StringPart.addZero(convIntegerTimeToStringHour(time)));
		sb.append(CommonConst.NAM_HOUR);
		sb.append(StringPart.addZero(convIntegerTimeToStringMinutes(time)));
		sb.append(CommonConst.NAM_MINUTES);
		return sb.toString();
	}

	/**
	 * 時刻変換（String→int）
	 * @param time 時刻（HH:MM）
	 * @return int	時刻（0時からの経過分数）
	 */
	public static int convStringTimeToIntegerTime(String time) {
		if (time.length() == 0) {
			time = "0:0";
		}
		String[] ar = time.split(CommonConst.STR_TIME_SEPARATOR);
		return convStringTimeToIntegerTime(ar[0], ar[1]);
	}

	/**
	 * 時刻変換（String→int）
	 * @param hour 時
	 * @param min 分
	 * @return int	時刻（0時からの経過分数）
	 */
	public static int convStringTimeToIntegerTime(String hour, String min) {
		return (NumberPart.getIntParam(hour) * 60) + NumberPart.getIntParam(min);
	}

	/**
	 * 時刻変換（String→String）
	 * @param hour 時
	 * @param min 分
	 * @return	HH:mm
	 */
	public static String convStringTimeFormatted(String hour, String min) {
		StringBuffer sb = new StringBuffer();
		sb.append(StringPart.addZero(hour));
		sb.append(CommonConst.STR_TIME_SEPARATOR);
		sb.append(StringPart.addZero(min));
		return sb.toString();
	}

	/**
	 * 時間変換（int→double）
	 * @param time int
	 * @return hh.mm <br>分はそのまま
	 * 				[例] 65分→1.05
	 */
	public static double convIntegerTimeToDoubleTime(int time) {
		double dblhour = Math.floor((double)time / 60);
		double dblmin =(double)time % 60 / 100;
		double dtime = dblhour + dblmin;
		return dtime;
	}

	/**
	 * 時間変換（int→String）
	 * <p>[例] 90分→1.5</p>
	 * <p>15分単位の場合のみ利用してください。</p>
	 * @param time int
	 * @return hh.mm 
	 */
	public static String convIntegerMinToStringHour(int time) {
		double dblhour = Math.floor((double)time / 60);
		double dblmin = (double)time % 60 / 60;
		double dtime = dblhour + dblmin;
		return String.valueOf(dtime);
	}

	/**
	 * 時間変換（int→String）
	 * @param time int
	 * @return HH時間MM分
	 */
	public static String convIntegerTimeToJPHours(int time) {
		StringBuffer sb = new StringBuffer();
		sb.append(convIntegerTimeToStringHour(time));
		sb.append(CommonConst.NAM_COMMON_TIME);
		if (convIntegerTimeToStringMinutes(time).length() < 2) {
			sb.append("0");			
		}
		sb.append(convIntegerTimeToStringMinutes(time));
		sb.append(CommonConst.NAM_MINUTES);
		return sb.toString();
	}

	/**
	 * 時間フォーマット
	 * @param hour 時間
	 * @return 時間(文字列)
	 */
	public static String getHourString(double hour) {
		NumberFormat nf = NumberFormat.getNumberInstance();
		nf.setMaximumFractionDigits(2);
		nf.setMinimumFractionDigits(2);
		return nf.format(hour);
	}

	/**
	 * 時刻変換（int→int）
	 * @since	0.0.2
	 * @param hour 時
	 * @param min 分
	 * @return int	時刻（0時からの経過分数）
	 */
	public static int convIntegerTimeToIntegerTime(int hour, int min) {
		int times = (hour * 60) + min;
		return times;
	}

}
