Code example for GregorianCalendar

Methods: set, setTimeZone

0
	 *  
	 * @param startTime 
	 * @return Calendar 
	 */ 
	public static GregorianCalendar toCalendar(String startTime) {
		GregorianCalendar calendar = new GregorianCalendar();
 
		if (startTime == null) {
			return calendar;
		} 
 
		// 数字以外の文字で文字列を区切る 
		String[] strs = startTime.split("[^0-9]");
		TimeZone timeZone = TimeZone.getDefault();
 
		if (startTime.matches("^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$")) {
			// 日付のみの文字列(時刻を00:00に設定) 
			calendar.set(Calendar.YEAR, Integer.valueOf(strs[0]));
			calendar.set(Calendar.MONTH, Integer.valueOf(strs[1]) - 1); // calendarでは、月を0-11で表現する
			calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(strs[2]));
			calendar.set(Calendar.HOUR_OF_DAY, 0);
			calendar.set(Calendar.MINUTE, 0);
			calendar.set(Calendar.SECOND, 0);
			calendar.set(Calendar.MILLISECOND, 0);
			calendar.setTimeZone(timeZone);
		} else { 
			calendar.set(Calendar.YEAR, Integer.valueOf(strs[0]));
			calendar.set(Calendar.MONTH, Integer.valueOf(strs[1]) - 1); // calendarでは、月を0-11で表現する
			calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(strs[2]));
			calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(strs[3]));
			calendar.set(Calendar.MINUTE, Integer.valueOf(strs[4]));
			calendar.set(Calendar.SECOND, Integer.valueOf(strs[5]));
			calendar.set(Calendar.MILLISECOND, Integer.valueOf(strs[6]));
 
			// タイムゾーンのパターンによる処理 
			if (startTime.matches(".+Z$")) {
				// UTC 
				timeZone.setRawOffset(0);
			} else if (startTime.matches(".+\\+[0-9][0-9]:[0-9][0-9]$")) {
				// オフセットがプラス 
				timeZone.setRawOffset((Integer.valueOf(strs[7])
						* HOUR_BY_MINUTES + Integer.valueOf(strs[8]))
						* MINUTE_BY_MILLI);
			} else if (startTime.matches(".+-[0-9][0-9]:[0-9][0-9]$")) {
				// オフセットがマイナス 
				timeZone.setRawOffset(-(Integer.valueOf(strs[7])
						* HOUR_BY_MINUTES + Integer.valueOf(strs[8]))
						* MINUTE_BY_MILLI);
			} 
			calendar.setTimeZone(timeZone);
		} 
		return calendar;
	} 
 
	/**