/* * Aipo is a groupware program developed by TOWN, Inc. * Copyright (C) 2004-2015 TOWN, Inc. * http://www.aipo.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.aimluck.commons.utils; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; import com.aimluck.eip.util.ALLocalizationUtils; /** * 入力フィールドで取り扱う日付に対するユーティリティクラスです。 <br /> * */ public class ALDateUtil { /** 日付の表示フォーマット */ protected static final String DEFAULT_DATE_FORMAT = "yyyy'/'M'/'d"; /** * 日付の文字列をもとに、Calendar型に変換します。 * * @param strDate * @return */ public static Calendar dateToCalendar(String strDate) { return dateToCalendar( strDate.substring(0, 4), strDate.substring(4, 6), strDate.substring(6, 8), false); } /** * 年月日の文字列をもとに、Calendar型に変換します。 * * @param strYear * @param strMonth * @param strDay * @param b * @return */ public static Calendar dateToCalendar(String strYear, String strMonth, String strDay, boolean b) { int year, month, day; try { year = Integer.parseInt(strYear); month = Integer.parseInt(strMonth) - 1; day = Integer.parseInt(strDay); } catch (StringIndexOutOfBoundsException e) { return null; } catch (NumberFormatException e) { return null; } Calendar cal = Calendar.getInstance(TimeZone.getDefault()); cal.setLenient(b); cal.set(year, month, day, 0, 0, 0); cal.set(Calendar.MILLISECOND, 0); return cal; } /** * 年月日の文字列表現を取得します。 * * @param year * @param month * @param day * @return */ public static String formatDate(int year, int month, int day) { return formatDate(String.valueOf(year), String.valueOf(month), String .valueOf(day)); } /** * 年月日の文字列表現を取得します。 * * @param strYear * @param strMonth * @param strDay * @return */ public static String formatDate(String strYear, String strMonth, String strDay) { Calendar cal = dateToCalendar(strYear, strMonth, strDay, false); if (cal == null) { return null; } try { cal.getTime(); } catch (IllegalArgumentException e) { return null; } return formatCalendarDate(cal); } /** * Calendar型を文字列の日付に変換します。 * * @param cal * @return */ public static String formatCalendarDate(Calendar cal) { return getStringYear(cal) + getStringMonth(cal) + getStringDay(cal); } /** * 年の文字列表現を取得します。 * * @param cal * @return */ public static String getStringYear(Calendar cal) { Object[] args = new Object[1]; args[0] = Integer.valueOf(cal.get(Calendar.YEAR)); return MessageFormat.format("{0,number,0000}", args); } /** * 月の文字列表現を取得します。 * * @param cal * @return */ public static String getStringMonth(Calendar cal) { return getStringMonth(cal.get(Calendar.MONTH)); } /** * 月の文字列表現を取得します。 * * @param month * @return */ public static String getStringMonth(int month) { switch (month) { case Calendar.JANUARY: return "01"; case Calendar.FEBRUARY: return "02"; case Calendar.MARCH: return "03"; case Calendar.APRIL: return "04"; case Calendar.MAY: return "05"; case Calendar.JUNE: return "06"; case Calendar.JULY: return "07"; case Calendar.AUGUST: return "08"; case Calendar.SEPTEMBER: return "09"; case Calendar.OCTOBER: return "10"; case Calendar.NOVEMBER: return "11"; case Calendar.DECEMBER: return "12"; default: return null; } } /** * 日の文字列表現を取得します。 * * @param cal * @return */ public static String getStringDay(Calendar cal) { Object[] args = new Object[1]; args[0] = Integer.valueOf(cal.get(Calendar.DATE)); return MessageFormat.format("{0,number,00}", args); } /** * 曜日の文字列表現を取得します。 * * @param cal * @return */ public static String getDayOfWeek(Calendar cal) { String res = ""; switch (cal.get(Calendar.DAY_OF_WEEK)) { case Calendar.SUNDAY: res = ALLocalizationUtils.getl10n("COMMONS_UTILS_SUNDAY_CELL"); break; case Calendar.MONDAY: res = ALLocalizationUtils.getl10n("COMMONS_UTILS_MONDAY_CELL"); break; case Calendar.TUESDAY: res = ALLocalizationUtils.getl10n("COMMONS_UTILS_TUSEDAY_CELL"); break; case Calendar.WEDNESDAY: res = ALLocalizationUtils.getl10n("COMMONS_UTILS_WEDNESDAY_CELL"); break; case Calendar.THURSDAY: res = ALLocalizationUtils.getl10n("COMMONS_UTILS_THURSDAY_CELL"); break; case Calendar.FRIDAY: res = ALLocalizationUtils.getl10n("COMMONS_UTILS_FRIDAY_CELL"); break; case Calendar.SATURDAY: res = ALLocalizationUtils.getl10n("COMMONS_UTILS_SATURDAY_CELL"); break; default: return null; } return res; } /** * 日付の文字列表現を取得します。 * * @param date * @return */ public static String format(Date date) { return format(date, null); } /** * 日付の文字列表現を取得します。 * * @param date * @param strFormat * @return */ public static String format(Date date, String strFormat) { String formatStr = null; int year; int month; int day; if (date == null) { return ""; } if (strFormat == null) { strFormat = DEFAULT_DATE_FORMAT; } try { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH) + 1; day = calendar.get(Calendar.DATE); } catch (Throwable ex) { year = 0; month = 0; day = 0; } SimpleDateFormat formatter = new SimpleDateFormat(strFormat); GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day); try { calendar.setLenient(false); formatStr = formatter.format(calendar.getTime()); } catch (Exception ex) { formatStr = ""; } return formatStr; } }