001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.fukurou.util;
017
018 import java.util.Arrays;
019 import java.util.Calendar;
020 import java.util.Date;
021 import java.util.Locale;
022 import java.util.Map;
023 import java.util.HashMap;
024 import java.text.DateFormat;
025 import java.text.SimpleDateFormat;
026 import java.text.ParseException;
027
028 /**
029 * HybsDateUtil.java ã¯ã€å?通的ã«ä½¿ç”¨ã•れã‚?Date,Calender関連メソãƒ?ƒ‰ã‚’集ç´?—ãŸã?staticメソãƒ?ƒ‰ã®ã¿ã§æ§‹æ?ã•れるクラスã§ã™ã?
030 *
031 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
032 *
033 * @og.group ユーãƒ?‚£ãƒªãƒ?‚£
034 *
035 * @version 5.5
036 * @author Kazuhiko Hasegawa
037 * @since JDK7.0,
038 */
039 public final class HybsDateUtil {
040
041 /** シスãƒ?ƒ ä¾å˜ã?改行記å·ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã? */
042 private static final String CR = System.getProperty("line.separator");
043
044 /** å?¨®ãƒ•ォーマットを簡易的ã«è¡¨ã—ãŸæ–?—å? */
045 private static final Map<String,String> DATE_FORMAT = new HashMap<String,String>();
046 static {
047 DATE_FORMAT.put( "YMD" ,"yyyyMMdd" );
048 DATE_FORMAT.put( "Y2MD" ,"yyMMdd" );
049 DATE_FORMAT.put( "YM" ,"yyyyMM" );
050 DATE_FORMAT.put( "MD" ,"MMdd" ); // 5.5.5.2 (2012/08/18)
051 DATE_FORMAT.put( "HMS" ,"HHmmss" );
052 DATE_FORMAT.put( "YMDHMS" ,"yyyyMMddHHmmss" );
053 DATE_FORMAT.put( "EEE" ,"EEE" );
054 DATE_FORMAT.put( "YMDF" ,"yyyy/MM/dd" );
055 DATE_FORMAT.put( "Y2MDF" ,"yy/MM/dd" );
056 DATE_FORMAT.put( "YMF" ,"yyyy/MM" );
057 DATE_FORMAT.put( "HMSF" ,"HH:mm:ss" );
058 DATE_FORMAT.put( "YMDHMSF" ,"yyyy/MM/dd HH:mm:ss" );
059 DATE_FORMAT.put( "MDF" ,"MM/dd" ); // 5.5.0.2 (2012/03/09) 和暦
060 DATE_FORMAT.put( "MDEF" ,"MM/dd(EEE)" ); // 5.5.0.2 (2012/03/09) 和暦
061 DATE_FORMAT.put( "MD2F" ,"MM�d日" ); // 5.5.5.2 (2012/08/18) 和暦
062 DATE_FORMAT.put( "GYMDF" ,"GGGGyyyy年MM�d日" ); // 5.5.0.2 (2012/03/09) 和暦
063 DATE_FORMAT.put( "G2YMDF" ,"Gyyyy/MM/dd" ); // 5.5.0.2 (2012/03/09) 和暦
064 DATE_FORMAT.put( "GYMF" ,"GGGGyyyy年MM� ); // 5.5.0.2 (2012/03/09) 和暦
065 DATE_FORMAT.put( "GYF" ,"GGGGyyyy" ); // 5.5.0.2 (2012/03/09) 和暦
066 }
067
068 /**
069 * ãƒ?ƒ•ォルトコンストラクターをprivateã«ã—ã¦ã€?
070 * オブジェクトã?生æ?ã‚’ã•ã›ãªã?‚ˆã?«ã™ã‚‹ã€?
071 *
072 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
073 *
074 */
075 private HybsDateUtil() {}
076
077 /**
078 * ç¾åœ¨æ—¥ä»˜ã?時刻を指定ã?ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã§æ–?—å?ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã?
079 * 出力フォーマットã?ã€?yyyy/MM/dd HH:mm:ss" 固定ã§ã™ã?
080 *
081 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
082 *
083 * @return ç¾åœ¨æ—¥ä»˜ã?時刻 ( ä¾?2012/09/05 18:10:24 )
084 */
085 public static final String getDate() {
086 DateFormat formatter = new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss",Locale.JAPAN );
087 return formatter.format(new Date());
088 }
089
090 /**
091 * ç¾åœ¨æ™‚刻を指定ã?ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã§æ–?—å?ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã?
092 * フォーマットã?æŒ?®šæ–¹æ³•ã?ã€java.text.SimpleDateFormat ã®æŒ?®šæ–¹æ³•ã¨åŒä¸?§ã™ã?
093 * å¤‰æ›æ™‚ã?ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯ã€Locale.JAPAN ã§ã™ã?
094 * ç¾åœ¨æ™‚刻ã¯ã€new Date() ã§æ±‚ã‚ã¾ã™ã?
095 *
096 * @param form フォーãƒ?–‡å—å? ( ä¾?"yyyy/MM/dd HH:mm:ss.SSS" )
097 *
098 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
099 *
100 * @return ç¾åœ¨æ—¥ä»˜ã?時刻
101 * @see java.text.SimpleDateFormat
102 */
103 public static final String getDate( final String form ) {
104 DateFormat formatter = new SimpleDateFormat( form,Locale.JAPAN );
105 return formatter.format( new Date() );
106 }
107
108 /**
109 * æŒ?®šæ™‚刻を指定ã?ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã§æ–?—å?ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã?
110 * フォーマットã?æŒ?®šæ–¹æ³•ã?ã€java.text.SimpleDateFormat ã®æŒ?®šæ–¹æ³•ã¨åŒä¸?§ã™ã?
111 * å¤‰æ›æ™‚ã?ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯ã€Locale.JAPAN ã§ã™ã?
112 * æŒ?®šæ™‚刻ã¯ã€new Date( time ) ã§æ±‚ã‚ã¾ã™ã?
113 *
114 * @param time æŒ?®šã?カレントタイãƒ??ãƒãƒ³ã‚°å€¤
115 * @param form フォーãƒ?–‡å—å? ( ä¾?"yyyy/MM/dd HH:mm:ss.SSS" )
116 *
117 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
118 *
119 * @return ç¾åœ¨æ—¥ä»˜ã?時刻( ä¾?2001/04/17 15:48:22 )
120 */
121 public static final String getDate( final long time,final String form ) {
122 DateFormat formatter = new SimpleDateFormat( form,Locale.JAPAN );
123 return formatter.format( new Date( time ) );
124 }
125
126 /**
127 * æŒ?®šã?æ–?—å?ã‹ã‚‰ã€ä»¥ä¸‹ã?æ–?—を削除ã—ãŸæ–?—å?ã‚’è¿”ã—ã¾ã™ã?
128 * '/' , '-' , ' ' , ':' ã®æ•°å—以外ã?æ–?—ã‚’å«ã‚?ƒ•ォーマットã•れãŸ
129 * 日付文å—å?ã‚’ã?日付データã?‘ã«å¤‰æ›ã™ã‚‹å ´åˆã«åˆ©ç”¨ã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã?¾ã™ã?
130 * よã£ã¦ã€ã?イナス記å·ã‚??å°æ•°ç‚¹ã€ã‚³ãƒ³ãƒžãªã©ã‚‚削除ã•れã¾ã™ã?
131 * ã“ã?メソãƒ?ƒ‰ã§ã¯ã€æ—¥ä»˜ã¨ã—ã¦ã®æ•´åˆæ?ã‚?¡ãƒã‚§ãƒ?‚¯ã¯è¡Œã„ã¾ã›ã‚“ã€?
132 *
133 * 引数ãŒã?null ã®å ´åˆã?ã€ã‚¼ãƒæ–?—å?ã«ã€å¤‰æ›ã—ã¾ã™ã?
134 *
135 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
136 * @og.rev 5.5.8.3 (2012/11/17) æ•°å—ã?ã¿è¿”ã™ä»•様ã ã£ãŸãŒã€å¯¾è±¡ä»¥å¤–ã?æ–?—å?力ã?ãã?ã¾ã¾è¿”ã™ã‚ˆã†å¤‰æ›´
137 *
138 * @param value ä»»æ„ã?æ–?—å??ˆä¾‹ï¼?001/04/17 15:48:22??
139 *
140 * @return æ•°å—ã ã‘ã§æ§‹æ?ã•れる文å—å??ˆä¾‹ï¼?0010417154822??nullã¯ã‚¼ãƒæ–?—å?ã‚’è¿”ã—ã¾ã?
141 */
142 public static final String parseNumber( final String value ) {
143 if( value == null ) { return ""; }
144
145 StringBuilder buf = new StringBuilder();
146 for( int i=0; i<value.length(); i++ ) {
147 char ch = value.charAt(i);
148 // if( ch >= '0' && ch <= '9' ) { buf.append( ch ); }
149 if( ch == '/' || ch == '-' || ch == ' ' || ch == ':'){} // 5.5.8.3 (2012/11/17) 何もã—ãªã?
150 else {
151 buf.append( ch );
152 }
153 }
154
155 return buf.toString();
156 }
157
158 /**
159 * æŒ?®šã?æ–?—å?ã‹ã‚‰ã€yyyy-mm-dd hh:mm:ss[.f...] å½¢å¼ã?æ–?—å?を作æ?ã—ã¾ã™ã?
160 * ã“れã¯ã€java.sql.Timestamp オブジェクトをæ–?—å?ã‹ã‚‰ä½œæ?ã™ã‚‹ã«å½“ãŸã‚Šã?
161 * Timestamp ã®æ–?—å?å½¢å¼ã«ã—ãªã‘れã°ãªã‚‰ãªã?Ÿã‚ã§ã™ã?
162 * æ¡æ•°ã¯ã€?¼˜æ¡?ã¾ãŸã?ã€?¼‘ï¼”æ¡ä»¥å¤–ã?å ´åˆã?ã€å¤‰æ›ã‚¨ãƒ©ãƒ¼ã¨ã—ã¾ã™ã?
163 *
164 * @og.rev 5.5.8.5 (2012/11/27) æ–°è¦ä½œæ?
165 *
166 * @param value ä»»æ„ã?æ–?—å??ˆä¾‹ï¼?0010417 or 20010417154822??
167 *
168 * @return Timestampã®æ–?—å?å½¢å¼ï¼ˆä¾‹ï¼?001-04-17 00:00:00 or 2001-04-17 15:48:22??
169 */
170 public static final String parseTimestamp( final String value ) {
171 if( value == null || ( value.length() != 8 && value.length() != 14 ) ) {
172 String errMsg = "日付文å—å?ã«ã€ä¸æ£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚8æ¡?ã¾ãŸã?ã€?¼‘ï¼”æ¡ã§æŒ?®šã—ã¦ãã ã•ã„ã€?
173 + " value=[" + value + "]" ;
174 throw new RuntimeException( errMsg );
175 }
176
177 StringBuilder buf = new StringBuilder();
178 buf.append( value.substring( 0,4 ) ).append( "-" );
179 buf.append( value.substring( 4,6 ) ).append( "-" );
180 buf.append( value.substring( 6,8 ) ).append( " " );
181 if( value.length() == 8 ) {
182 buf.append( "00:00:00" );
183 }
184 else {
185 buf.append( value.substring( 8,10 ) ).append( ":" );
186 buf.append( value.substring( 10,12 ) ).append( ":" );
187 buf.append( value.substring( 12,14 ) );
188 }
189
190 return buf.toString();
191 }
192
193
194 /**
195 * 日付文å—å?ã®æ¡æ•°ã®æ•´åˆæ?ã‚’å–りã¾ã™ã?
196 * ã“れã¯ã€å?部ã§ã€parseNumber(String) 処ç?«ã‚ˆã‚Šã€ä¸è¦ãªãƒ•ォーマット記å·ã‚’削除ã—ã¾ã™ã?
197 * ã“ã“ã§ã¯ã€åŸºæœ¬çš?«ã¯ã€?¼–æ–‡å—ï¼?yyyMM?‰ã??˜æ–‡å—ï¼?yyyMMdd?‰ã??‘4文å—ï¼?yyyMMddHHmmss??
198 * ã®æ—¥ä»˜æ–‡å—å?を作æ?ã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã?¾ã™ãŒã€æŒ‡å®šã?æ¡æ•°ä»¥å¤–ã?ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã?
199 *
200 * 引数ãŒã?null â‡?æ¡æ•°ã«ç„¡é–¢ä¿‚ã«ã€ç©ºæ–?—å?ã‚’è¿”ã™ã€?
201 * å¼•æ•°ã®æ¡æ•°ãŒä¸?? â‡?ãã?値を返ã™ã€?
202 * å¼•æ•°ã®æ¡æ•°ãŒä¸ä¸?? â‡?エラー
203 * ãŸã ã—ã?å¼•æ•°ã®æœ?¤§é•·ã¯ã€?¼‘4ケタã«åˆ¶é™ã—ã¦ã?¾ã™ã?
204 *
205 * ã“ã?メソãƒ?ƒ‰ã§ã¯ã€æ—¥ä»˜ã¨ã—ã¦æˆç«‹ã—ã¦ã?‚‹ã‹ã©ã?‹??9999999ãªã©?‰ã?判定ã—ã¦ã?¾ã›ã‚“ã€?
206 *
207 * @og.rev 5.6.6.0 (2013/07/05) メソãƒ?ƒ‰ã®å†?®¹ã‚’ç§»ã™ã?
208 *
209 * @param value ä»»æ„ã?æ—¥ä»˜ã‘æ–?—å?
210 * @param size 変æ›ã—ãŸã?¡æ•°
211 *
212 * @return æ•°å—ã ã‘ã§æ§‹æ?ã•れる文å—å??ˆä¾‹ï¼?0010417154822??nullã¯ã‚¼ãƒæ–?—å?ã‚’è¿”ã—ã¾ã?
213 */
214 public static final String parseDate( final String value , final int size ) {
215 return parseDate( value , size , size ); // æœ?°ã¨æœ?¤§ã‚’åŒã˜å?ã«ã™ã‚‹ã€?
216 }
217
218 /**
219 * 日付文å—å?ã®æ¡æ•°ã®æ•´åˆæ?ã‚’å–りã¾ã™ã?
220 * ã“れã¯ã€å?部ã§ã€parseNumber(String) 処ç?«ã‚ˆã‚Šã€ä¸è¦ãªãƒ•ォーマット記å·ã‚’削除ã—ã¾ã™ã?
221 * ã“ã“ã§ã¯ã€åŸºæœ¬çš?«ã¯ã€?¼–æ–‡å—ï¼?yyyMM?‰ã??˜æ–‡å—ï¼?yyyMMdd?‰ã??‘4文å—ï¼?yyyMMddHHmmss??
222 * ã®æ—¥ä»˜æ–‡å—å?を作æ?ã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã?¾ã™ãŒã€ãれ以外ã?æ¡æ•°ã§ã‚‚下記ã?ルールã«å¾“ã£ã¦
223 * 処ç?•れã¾ã™ã?
224 *
225 * 引数ãŒã?null â‡?æ¡æ•°ã«ç„¡é–¢ä¿‚ã«ã€ç©ºæ–?—å?ã‚’è¿”ã™ã€?
226 * å¼•æ•°ã®æ¡æ•°ãŒç¯?›²å†? â‡?以下ã?処ç?‚’実行ã™ã‚‹ã?
227 * å¼•æ•°ã®æ¡æ•°ã‚’åŒã? â‡?ãã?ã¾ã¾è¿”ã™ã€?
228 * å¼•æ•°ã®æ¡æ•°ã‚ˆã‚Šå¤§ãã„ â‡?余をカãƒ?ƒˆã—ã¦ã€å¼•æ•°ã®æœ?¤§é•·ã«ãã‚ãˆã‚‹ã€?
229 * å¼•æ•°ã®æ¡æ•°ã«è¶³ã‚Šãªã?â‡?"20000101000000" ã®æ–?—å?ã®éƒ¨åˆ?–‡å—å?ã‚’çµåˆã•ã›ã¦ã€å¼•æ•°ã®æœ?¤§é•·ã«ãã‚ãˆã‚‹ã€?
230 * ãŸã ã—ã?å¼•æ•°ã®æœ?¤§é•·ã¯ã€?¼‘4ケタã«åˆ¶é™ã—ã¦ã?¾ã™ã?
231 *
232 * ã“ã?メソãƒ?ƒ‰ã§ã¯ã€æ—¥ä»˜ã¨ã—ã¦æˆç«‹ã—ã¦ã?‚‹ã‹ã©ã?‹??9999999ãªã©?‰ã?判定ã—ã¦ã?¾ã›ã‚“ã€?
233 *
234 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
235 * @og.rev 5.6.1.1 (2013/02/08) æ¡æ•°ãƒã‚§ãƒ?‚¯å°Žå?。6æ¡ä»¥ä¸‹ã ã¨ã‚¨ãƒ©ãƒ¼ã«ã™ã‚‹ã€?
236 * @og.rev 5.6.6.0 (2013/07/05) æ¡æ•°ãƒã‚§ãƒ?‚¯ã®æœ?°?æœ?¤§æŒ?®?
237 *
238 * @param value ä»»æ„ã?æ—¥ä»˜ã‘æ–?—å?
239 * @param minSize 変æ›ã—ãŸã?¡æ•°ã®æœ?°å?
240 * @param maxSize 変æ›ã—ãŸã?¡æ•°ã®æœ?¤§å€¤
241 *
242 * @return æ•°å—ã ã‘ã§æ§‹æ?ã•れる文å—å??ˆä¾‹ï¼?0010417154822??nullã¯ã‚¼ãƒæ–?—å?ã‚’è¿”ã—ã¾ã?
243 */
244 // public static final String parseDate( final String value , final int size ) {
245 public static final String parseDate( final String value , final int minSize , final int maxSize ) {
246 if( value == null ) { return ""; }
247
248 String rtn = parseNumber( value );
249
250 // å¼•æ•°ã®æœ?¤§é•·ã¯ã€?¼‘4ケタã«åˆ¶é™ã—ã¦ã?¾ã™ã?
251 if( maxSize > 14 ) {
252 String errMsg = "日付登録ã«è¨±å¯ã§ãã‚‹æœ?¤§æ¡æ•°ã¯ã€?¼‘4ケタã§ã™ã?"
253 + " maxSize=[" + maxSize + "]" ;
254 throw new RuntimeException( errMsg );
255 }
256
257 // int maxSize = ( size > 14 ) ? 14 : size ; // å…ˆã«æœ?¤§ã‚µã‚¤ã‚ºã‚’求ã‚ã¦ãŠã
258 int len = rtn.length() ;
259
260 if( len == maxSize ) { rtn = value; }
261 // else if( len > maxSize ) { rtn = rtn.substring( 0,maxSize ); }
262 // 5.6.1.1 (2013/02/08) æ¡æ•°ãƒã‚§ãƒ?‚¯å°Žå?。6æ¡ä»¥ä¸‹ã ã¨ã‚¨ãƒ©ãƒ¼ã«ã™ã‚‹ã€?
263 // else if( len < 6 ) {
264 // 5.6.6.0 (2013/07/05) æ¡æ•°ãƒã‚§ãƒ?‚¯ã®æœ?°?æœ?¤§æŒ?®šã§ã€ç¯?›²å¤–ã?エラー
265 else if( len < minSize || len > maxSize ) {
266 String errMsg = "日付文å—å?ã«ã€ä¸æ£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚最å°["
267 + minSize + "] ã‹ã‚‰ã€æœ€å¤§[" + maxSize + "]ã®ç¯?›²ã§æŒ?®šã—ã¦ãã ã•ã„ã€?
268 + " value=[" + value + "]" ;
269 throw new RuntimeException( errMsg );
270 }
271 else {
272 rtn = rtn + "20000101000000".substring( len,maxSize ) ; // ä¸é–“æ–‡å—å?ã‚’åŠ ãˆã‚‹ã€?
273 }
274
275 return rtn ;
276 }
277
278 /**
279 * 日付文å—å?ã®å޳å¯?ªæ•´åˆæ?ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
280 * ã“ã“ã§æŒ?®šã§ãã‚‹ã®ã¯ã€?¼˜æ–‡å—ï¼?yyyMMdd?‰ã??‘4文å—ï¼?yyyMMddHHmmss?‰ã?ã©ã¡ã‚‰ã‹ã®
281 * æ•°å—ã ã‘ã?日付文å—å?ã§ã‚りã€ãれãŒã€æ—¥ä»˜ã¨ã—ã¦æ£ã—ã„ã‹ã©ã?‹ã®ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
282 * æ£ã—ã‘れã?ã€true ã‚’ã?é–“é•ã£ã¦ã?‚Œã°ã€false ã‚’è¿”ã—ã¾ã™ã?
283 * ã“ã“ã§ã¯ã€?0120230?ˆï¼’月?“ï¼æ—¥?‰ãªã©ã®æ—¥ä»˜ã‚„ã€?0120101235960 ãªã©ã‚?false ã«ãªã‚Šã¾ã™ã?
284 * 引数ãŒã?null ãŠã‚ˆã³ã€ç©ºæ–?—å?ã®å ´åˆã‚‚ã€false ã‚’è¿”ã—ã¾ã™ã?ã§ã€?¿ã‘ãŸã??åˆã?ã€äº‹å‰ã«
285 * 判定ã—ã¦ãŠã„ã¦ãã ã•ã„ã€?
286 *
287 * å†?ƒ¨å‡¦ç?¨ã—ã¦ã¯ã€DateFormat ã§ã€setLenient( false ) ã‚’è¨å®šã™ã‚‹ã“ã¨ã§ã€?
288 * æ—¥ä»?時刻解æžã‚’厳å¯?«è§£æžã™ã‚‹ã«ã—ã¦ã€ParseException ãŒç™ºç”Ÿã—ãªã?‹ã©ã?‹åˆ¤å®šã—ã¦ã?¾ã™ã?
289 *
290 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
291 *
292 * @param value æ•°å—ã ã‘ã§æ§‹æ?ã•ã‚Œã‚‹æ—¥ä»˜ã‘æ–?—å?
293 *
294 * @return true:日付ã¨ã—ã¦æ£ã—ã„å ´å?false:日付ã¨ã—ã¦é–“é•ã£ã¦ã?‚‹å ´å?
295 */
296 public static final boolean isStrict( final String value ) {
297 if( value == null || ( value.length() != 8 && value.length() != 14 ) ) { return false; }
298
299 // 日付ã?厳å¯?ªãƒã‚§ãƒ?‚¯
300 String form = (value.length() == 8) ? "yyyyMMdd" : "yyyyMMddHHmmss" ;
301 DateFormat formatter = new SimpleDateFormat( form,Locale.JAPAN );
302 formatter.setLenient( false ); // æ—¥ä»?時刻解æžã‚’厳å¯?«è¡Œã†(false=厳å¯?
303
304 boolean flag ;
305 try {
306 formatter.parse( value );
307 flag = true;
308 }
309 catch( ParseException ex ) {
310 flag = false;
311 }
312
313 return flag;
314 }
315
316 /**
317 * 日付関係ã?æƒ??を簡易的ã«å‡¦ç?—ã¾ã™ã?
318 *
319 * 第ä¸?¼•æ•° "XXXX" ã¯ã€æ—¥ä»˜å?ç?‚’行ã†ãƒ•ォーマットã?予ç´?ªžã«ãªã£ã¦ã?¾ã™ã?
320 * ・YMDã€???šï¼˜æ–‡å—ã?日付データ(yyyyMMdd)を扱ã?¾ã™ã?
321 * ・Y2MDã€??šï¼–æ–‡å—ã?日付データ(yyMMdd)を扱ã?¾ã™ã?
322 * ・YMã€?? ?šï¼–æ–‡å—ã?日付データ(yyyyMM)を扱ã?¾ã™ã?
323 * ・MDã€?? ?šï¼”æ–‡å—ã?日付データ(MMdd)を扱ã?¾ã™ã?(5.5.5.2 追åŠ?
324 * ・HMSã€???šï¼–æ–‡å—ã?時刻ãƒ??ã‚¿(HHmmss)を扱ã?¾ã™ã?
325 * ・YMDHMS ?šï¼‘4文å—ã?日付データ(yyyyMMddHHmmss)を扱ã?¾ã™ã?
326 * ・EEEã€???šæ›œæ—¥ã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒã‚±ãƒ¼ãƒ«(EEE)ã§è¡¨ç¤ºã—ã¾ã™ã?
327 *
328 * F付ãã¯ã€ãƒ•ォーマットã•ã‚ŒãŸæ—¥ä»˜ã‚’è¿”ã—ã¾ã™ã?
329 * ・YMDFã€??šï¼‘ï¼æ–‡å—ã?日付表ç¾(yyyy/MM/dd)を扱ã?¾ã™ã?
330 * ・Y2MDFã€?¼šï¼˜æ–‡å—ã?日付表ç¾(yy/MM/dd)を扱ã?¾ã™ã?
331 * ・YMFã€???šï¼—æ–‡å—ã?日付表ç¾(yyyy/MM)を扱ã?¾ã™ã?
332 * ・HMSFã€??šï¼˜æ–‡å—ã?時刻表ç¾(HH:mm:ss)を扱ã?¾ã™ã?
333 * ・YMDHMSF?šï¼‘9文å—ã?日付表ç¾(yyyy/MM/dd HH:mm:ss)を扱ã?¾ã™ã?
334 * ・MDFã€???šï¼•æ–‡å—ã?月日表ç¾(MM/dd)を扱ã?¾ã™ã?
335 * ・MDEFã€??šï¼•æ–‡å—ï¼‹æ›œæ—¥ã®æœˆæ—¥è¡¨ç¾(MM/dd(EEE))を扱ã?¾ã™ã?
336 * ・MD2Fã€??šå’Œæš¦ã®æœˆæ—¥è¡¨ç¾(MMæœ?dæ—¥)を扱ã?¾ã™ã?(5.5.5.2 追åŠ?
337 * ・GYMDFã€?¼šå’Œæš¦ã®å¹´æœˆæ—¥è¡¨ç¾(GGGGyyyyå¹´MMæœ?dæ—¥)を扱ã?¾ã™ã?
338 * ・G2YMDF ?šå’Œæš¦ã®æ—¥ä»˜è¡¨ç¾(Gyyyy/MM/dd)を扱ã?¾ã™ã?
339 * ・GYMFã€??šå’Œæš¦ã®å¹´æœˆè¡¨ç¾(GGGGyyyyå¹´MMæœ?を扱ã?¾ã™ã?
340 * ・GYFã€???šå’Œæš¦ã®å¹´è¡¨ç¾(GGGGyyyy)を扱ã?¾ã™ã?
341 *
342 * ãªãŠã?上記以外ã?フォーマットをæŒ?®šã™ã‚‹å?åˆã?ã€XXXX部åˆ?«ç›´æŽ¥è¨˜è¿°ã§ãã¾ã™ã?(5.5.5.2 追åŠ?
343 * ãŸã ã—ã?基本çš?«ã¯ã€è?由フォーマットã?ã€ã‚¨ãƒ©ãƒ¼ãƒã‚§ãƒ?‚¯ãŒãªã?‚ºã€ä½¿ã‚ãªã?§ãã ã•ã„ã€?
344 *
345 * 第二引数 AA ã¯ã€åŸºæº–ã¨ãªã‚‹æ—¥ä»˜ã‚’ã€yyyyMMddå½¢å¼ã§æŒ?®šã—ã¾ã™ã?nullã®å ´åˆã?ã€ç¾åœ¨æ™‚刻を使用ã—ã¾ã™ã?
346 * æŒ?®šã§ãる日付ã?ã€yyyyMMddå½¢å¼ã‚’推奨ã—ã¾ã™ãŒã€?¼˜æ–‡å—ã§ãªã??åˆã?ã€?-' ã‚?'/' を削除ã®ä¸Šã?
347 * å‰åŠ?˜æ–‡å—ã?ã¿ä½¿ç”¨ã—ã¾ã™ã?ãŸã¨ãˆã?ã€?2012/09/05 16:52:36" ã®ã‚ˆã†ãªãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆãƒ‡ãƒ¼ã‚¿ãŒæ¸¡ã•れã?
348 * å ´åˆã?"20120905 16:52:36" ã«å¤‰æ›å¾Œã?å‰åŠ?˜æ–‡å—ã? "20120905" ãŒä½¿ã‚れã¾ã™ã?
349 * よã£ã¦ã€ãƒ•ォーマットã•れã¦ã?‚‹å ´åˆã§ã‚‚å?ç?‚’ãŠã“ãªã?¾ã™ãŒã€æœˆã€æ—¥ã¯ã€??ゼãƒåŸ‹ã‚ã®?’æ–‡å—ã§
350 * 渡ã—ã¦ãã ã•ã„ã€?
351 *
352 * 第三引数 BB ã¯ã€æ—¥ä»˜ã«ã¤ã?¦ã®åŠ?¸›ç®—å?ç?‚’行ã†ãŸã‚ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’æŒ?®šã—ã¾ã™ã?
353 * nullã®å ´åˆã?ã€ãªã«ã‚‚åŠ æ¸›ç®—å?ç?‚’行ã„ã¾ã›ã‚“ã€?
354 * ・SD ?šå½“æœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(当月?‘æ—¥)
355 * ・ED ?šå½“æœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(当月月末)
356 * ・SW ?šæ—¥ä»˜å?ç??週åˆã‚(月曜日)ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?日付ã?当日よりå‰ã«ç§»å‹•ã—ã¾ã™ã?
357 * ・EW ?šæ—¥ä»˜å?ç??週末(日曜日)ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?日付ã?当日より後ã‚ã«ç§»å‹•ã—ã¾ã™ã?
358 * ・H1 ??HXXX ?šæ™‚ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?H1ãªã‚‰ï¼‘時間後ã?H24 ãªã‚‰ï¼’4時間å¾?5.5.5.6 (2012/08/31) 追åŠ?
359 * ・D1 ??DXXX ?šæ—¥ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?D1ãªã‚‰ç¿Œæ—¥ã€D200 ãªã‚?00æ—¥å¾?
360 * ・M1 ??MXXX ?šæœˆã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?M1ãªã‚‰ç¿Œæœˆã€M6 ãªã‚‰åŠå¹´å¾?
361 * ・BSD ?šå?月ã?æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(先月?‘æ—¥)(5.5.5.2 追åŠ?
362 * ・BED ?šå?月ã?æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(先月月末)(5.5.5.2 追åŠ?
363 * ・ASD ?šç¿Œæœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(翌月?‘æ—¥)(5.5.5.2 追åŠ?
364 * ・AED ?šç¿Œæœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(翌月月末)(5.5.5.2 追åŠ?
365 *
366 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
367 * @og.rev 5.6.1.1 (2013/02/08) prmB処ç?‚’ã€calendarCalc メソãƒ?ƒ‰ã¸ç§»å‹?
368 *
369 * @param key フォーマットã?予ç´?ª?
370 * @param prmA 基準ã¨ãªã‚‹æ—¥ä»?nullã®å ´åˆã?ã€å?ç?™‚刻)
371 * @param prmB 処ç?‚³ãƒžãƒ³ãƒ?
372 *
373 * @return メãƒ?‚»ãƒ¼ã‚¸æƒ??
374 */
375 public static final String getDateFormat( final String key ,final String prmA ,final String prmB ) {
376
377 // prmA ã?null ã®å ´åˆã?ã€ãã®ã¾ã¾ã€ç¾åœ¨æ™‚刻ãŒä½¿ã‚れã¾ã™ã?
378 Calendar now = getCalendar( prmA );
379
380 // 5.6.1.1 (2013/02/08) getDateFormat( String ,String ,String ) ã‹ã‚‰åˆ?›¢ã€?
381 calendarCalc( now,prmB );
382
383 // if( prmB != null ) {
384 // if( "SD".equals( prmB ) ) { now.set( Calendar.DATE,1 ); }
385 // else if( "ED".equals( prmB ) ) { now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) ); }
386 // // 5.5.5.2 (2012/08/18) BSD,BED,ASD,AED 追�
387 // else if( "BSD".equals( prmB ) ) { // (先月?‘æ—¥)
388 // now.roll( Calendar.MONTH,false ); now.set( Calendar.DATE,1 );
389 // }
390 // else if( "BED".equals( prmB ) ) { // (先月月末)
391 // now.roll( Calendar.MONTH,false ); now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) );
392 // }
393 // else if( "ASD".equals( prmB ) ) { // (翌月?‘æ—¥)
394 // now.roll( Calendar.MONTH,true ); now.set( Calendar.DATE,1 );
395 // }
396 // else if( "AED".equals( prmB ) ) { // (翌月月末)
397 // now.roll( Calendar.MONTH,true ); now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) );
398 // }
399 // else if( "SW".equals( prmB ) ) {
400 // // 日付型æ–?—å?入力データã®é–‹å§‹æ—¥ã‚’月曜日ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
401 // // SUNDAY=1 , MONDAY=2 ã«ãªã‚Šã¾ã™ã?月曜日ã¨ã®å·®ã?‘ã€å‰ã«æˆ»ã—ã¾ã™ã?
402 // // æŒ?®šæ—¥ãŒæ—¥æ›œæ—¥ã®å ´åˆã?ã€æœˆæ›œæ—¥ã¾ã§æˆ»ã—ã¾ã™ã?
403 // int shu = now.get( Calendar.DAY_OF_WEEK ) - Calendar.MONDAY ;
404 //
405 // if( shu > 0 ) { now.add( Calendar.DATE, -shu ); }
406 // else if( shu < 0 ) { now.add( Calendar.DATE, -6 ); } // 日曜日ã®å‡¦ç?
407 //
408 // }
409 // else if( "EW".equals( prmB ) ) {
410 // // 日付型æ–?—å?入力データã®çµ‚äº?—¥ã‚’日曜日ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
411 // // SUNDAY=1 , MONDAY=2 ã«ãªã‚Šã¾ã™ã?日曜日ã«ãªã‚‹ã‚ˆã?«ã€å?ã«é€²ã‚ã¾ã™ã?
412 // int shu = now.get( Calendar.DAY_OF_WEEK ) ;
413 //
414 // if( shu != Calendar.SUNDAY ) { now.add( Calendar.DATE, 8-shu ); }
415 // }
416 // // 5.5.5.6 (2012/08/31) H1 ??HXXX 追åŠ??時間ã®åŠ?®—ã‚’æŒ?®šã§ãã‚‹ã€?
417 // else if( prmB.startsWith( "H" ) && prmB.length() > 1 ) {
418 // int hour = Integer.parseInt( prmB.substring( 1 ) );
419 // now.add( Calendar.HOUR_OF_DAY, hour );
420 // }
421 // else if( prmB.startsWith( "D" ) && prmB.length() > 1 ) {
422 // int day = Integer.parseInt( prmB.substring( 1 ) );
423 // now.add( Calendar.DATE, day );
424 // }
425 // else if( prmB.startsWith( "M" ) && prmB.length() > 1 ) {
426 // int month = Integer.parseInt( prmB.substring( 1 ) );
427 // now.add( Calendar.MONTH , month );
428 // }
429 // else {
430 // String errMsg = "日付変数パラメータã«ã€ä¸æ£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚以下ã?ä¸ã‹ã‚‰æŒ?®šã—ãªãŠã—ã¦ãã ã•ã„ã€?
431 // + "æŒ?®šå¯èƒ½?š[SD,ED,BSD,BED,ASD,AED,SW,EW,D1?žDXXX,M1?žMXXX]"
432 // + " prmB=[" + prmB + "]" ;
433 // throw new RuntimeException( errMsg );
434 // }
435 // }
436
437 String format = DATE_FORMAT.get( key );
438 if( format == null ) {
439 // DATE_FORMAT ã«å˜åœ¨ã—ãªã?ƒ•ォーマットをæŒ?®šã—ã¦ã‚‚ã?エラーã«ã—ã¾ã›ã‚“。ãŸã?—ã€å¾Œå?ç?§ãƒ•ォーマットエラーã«ãªã‚‹å¯èƒ½æ€§ã¯æ®‹ã‚Šã¾ã™ã?
440 String errMsg = "日付変数ã‚ーã«ã€ä¸æ£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚以下ã?ä¸ã‹ã‚‰æŒ?®šã—ãªãŠã—ã¦ãã ã•ã„ã€?
441 + CR
442 + "æŒ?®šå¯èƒ½?? + Arrays.toString( DATE_FORMAT.keySet().toArray( new String[DATE_FORMAT.size()] ) ) // 5.5.5.2 (2012/08/18)
443 + CR
444 + " key=[" + key + "]" ;
445 // 5.5.5.2 (2012/08/18) 自由フォーマットをè¨å®šå¯èƒ½ã¨ã—ã¾ã™ã?
446 System.err.println( "CommonTagSupport {@DATE.XXXX AA BB} è¦å‘? );
447 System.err.println( errMsg );
448 format = key; // 5.5.5.2 (2012/08/18) 自由フォーマット指�
449 }
450
451 //5.5.0.2 å…ˆé?Gã®å ´åˆã?和暦ãªã®ã§formatterã®Localeを変更ã™ã‚‹
452 DateFormat formatter = null;
453 if( key.indexOf('G') == 0 ){
454 formatter = new SimpleDateFormat( format, new Locale("ja","JP","JP"));
455 }
456 else{
457 formatter = new SimpleDateFormat( format,Locale.JAPAN );
458 }
459
460 return formatter.format( now.getTime() );
461 }
462
463 /**
464 * é–‹å§‹å‰è¨å®šå?ã€ã¾ãŸã? 終äº?¾Œè¨å®šå?ã®æ–?—å?ã‹ã‚‰ã€ã‚ªãƒ—ションæ–?—å?ã‚’åˆæˆã—ã¾ã™ã?
465 * 基準ã¨ãªã‚‹æ—¥ä»˜ã«è¨ˆç®—ã—ãŸçµæžœã‚’åæ˜?•ã›ã¾ã™ã?
466 *
467 * prmB ã¯ã€æ—¥ä»˜ã«ã¤ã?¦ã®åŠ?¸›ç®—å?ç?‚’行ã†ãŸã‚ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’æŒ?®šã—ã¾ã™ã?
468 * ・SD ?šå½“æœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(当月?‘æ—¥)
469 * ・ED ?šå½“æœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(当月月末)
470 * ・SW ?šæ—¥ä»˜å?ç??週åˆã‚(月曜日)ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?日付ã?当日よりå‰ã«ç§»å‹•ã—ã¾ã™ã?
471 * ・EW ?šæ—¥ä»˜å?ç??週末(日曜日)ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?日付ã?当日より後ã‚ã«ç§»å‹•ã—ã¾ã™ã?
472 * ・D1 ??DXXX ?šæ—¥ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?D1ãªã‚‰ç¿Œæ—¥ã€D200 ãªã‚?00æ—¥å¾?
473 * ・M1 ??MXXX ?šæœˆã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?M1ãªã‚‰ç¿Œæœˆã€M6 ãªã‚‰åŠå¹´å¾?
474 * ・BSD ?šå?月ã?æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(先月?‘æ—¥)(5.5.5.2 追åŠ?
475 * ・BED ?šå?月ã?æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(先月月末)(5.5.5.2 追åŠ?
476 * ・ASD ?šç¿Œæœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(翌月?‘æ—¥)(5.5.5.2 追åŠ?
477 * ・AED ?šç¿Œæœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(翌月月末)(5.5.5.2 追åŠ?
478 * ・数å—:日を指定ã?åˆ? ã‘é?ã‚ã¾ã™ã?D1 ??DXXX ã®ç°¡ç•¥ç³»
479 *
480 * @og.rev 5.6.1.1 (2013/02/08) getDateFormat( String ,String ,String ) ã‹ã‚‰åˆ?›¢ã€?
481 *
482 * @param now 基準ã¨ãªã‚‹æ—¥ä»˜ï¼?alendarオブジェクトï¼?
483 * @param prmB 処ç?‚³ãƒžãƒ³ãƒ?
484 *
485 */
486 public static final void calendarCalc( final Calendar now,final String prmB ) {
487
488 if( prmB != null ) {
489 if( "SD".equals( prmB ) ) { now.set( Calendar.DATE,1 ); }
490 else if( "ED".equals( prmB ) ) { now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) ); }
491 else if( "BSD".equals( prmB ) ) { // (先月?‘æ—¥)
492 now.roll( Calendar.MONTH,false ); now.set( Calendar.DATE,1 );
493 }
494 else if( "BED".equals( prmB ) ) { // (先月月末)
495 now.roll( Calendar.MONTH,false ); now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) );
496 }
497 else if( "ASD".equals( prmB ) ) { // (翌月?‘æ—¥)
498 now.roll( Calendar.MONTH,true ); now.set( Calendar.DATE,1 );
499 }
500 else if( "AED".equals( prmB ) ) { // (翌月月末)
501 now.roll( Calendar.MONTH,true ); now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) );
502 }
503 else if( "SW".equals( prmB ) ) {
504 // 日付型æ–?—å?入力データã®é–‹å§‹æ—¥ã‚’月曜日ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
505 // SUNDAY=1 , MONDAY=2 ã«ãªã‚Šã¾ã™ã?月曜日ã¨ã®å·®ã?‘ã€å‰ã«æˆ»ã—ã¾ã™ã?
506 // æŒ?®šæ—¥ãŒæ—¥æ›œæ—¥ã®å ´åˆã?ã€æœˆæ›œæ—¥ã¾ã§æˆ»ã—ã¾ã™ã?
507 int shu = now.get( Calendar.DAY_OF_WEEK ) - Calendar.MONDAY ;
508
509 if( shu > 0 ) { now.add( Calendar.DATE, -shu ); }
510 else if( shu < 0 ) { now.add( Calendar.DATE, -6 ); } // 日曜日ã®å‡¦ç?
511
512 }
513 else if( "EW".equals( prmB ) ) {
514 // 日付型æ–?—å?入力データã®çµ‚äº?—¥ã‚’日曜日ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
515 // SUNDAY=1 , MONDAY=2 ã«ãªã‚Šã¾ã™ã?日曜日ã«ãªã‚‹ã‚ˆã?«ã€å?ã«é€²ã‚ã¾ã™ã?
516 int shu = now.get( Calendar.DAY_OF_WEEK ) ;
517
518 if( shu != Calendar.SUNDAY ) { now.add( Calendar.DATE, 8-shu ); }
519 }
520 else if( prmB.startsWith( "D" ) && prmB.length() > 1 ) {
521 int day = Integer.parseInt( prmB.substring( 1 ) );
522 now.add( Calendar.DATE, day );
523 }
524 else if( prmB.startsWith( "M" ) && prmB.length() > 1 ) {
525 int month = Integer.parseInt( prmB.substring( 1 ) );
526 now.add( Calendar.MONTH , month );
527 }
528 else {
529 // 上記ã?パターン以外ã?ã€æ•°å—(日付)ãªã®ã§ã€å¤‰æ›ã§ããªã‘れã°ã€ãƒ•ォーマットエラー
530 try {
531 int day = Integer.parseInt( prmB );
532 now.add( Calendar.DATE, day );
533 }
534 catch( NumberFormatException ex ) {
535 String errMsg = "日付変数パラメータã«ã€ä¸æ£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚以下ã?ä¸ã‹ã‚‰æŒ?®šã—ãªãŠã—ã¦ãã ã•ã„ã€?
536 + "æŒ?®šå¯èƒ½?š[SD,ED,BSD,BED,ASD,AED,SW,EW,D1?žDXXX,M1?žMXXX]"
537 + " prmB=[" + prmB + "]" ;
538 throw new RuntimeException( errMsg,ex );
539 }
540 }
541 }
542 }
543
544 /**
545 * æŒ?®šã?å¼•æ•°ã®æ—¥ä»˜ã‘æ–?—å?よりã€ã‚«ãƒ¬ãƒ³ãƒ?‚ªãƒ–ジェクトを作æ?ã—ã¾ã™ã?
546 * 引数ã¯ã€æ•°å—以外ã?æ–?—を削除ã—ãŸçŠ¶æ…‹ã«å¤‰æ›å¾Œã?処ç?«å›žã—ã¾ã™ã?
547 * ä¸è¦ãªæ–?—を削除ã—ãŸçŠ¶æ…‹ã§ã€?¼˜æ–‡å—以上ã«ãªã‚‹ã‚ˆã?«æŒ?®šã—ã¦ãã ã•ã„ã€?
548 * 例外的ã«ã€?¼–æ–‡å—ã?å ´åˆã?ã€yyyyMM01 ã¨ã¿ãªã—ã¦ã€?01" æ–?—å?を付与ã—ã¾ã™ã?
549 * 引数㫠null を指定ã™ã‚‹ã¨ã€ç¾åœ¨æ™‚刻ã®ã‚«ãƒ¬ãƒ³ãƒ?‚’è¿”ã—ã¾ã™ã?
550 * ãれ以外ã?ãƒ??ã‚¿ã§ã€?¼˜ã‚±ã‚¿ä»¥ä¸‹ã?å ´åˆã?ã€RuntimeException ãŒç™ºç”Ÿã—ã¾ã™ã?
551 * ?˜ã‚±ã‚¿ä»¥ä¸Šï¼‘4ケタ未æº??å ´åˆã?ã€?¼˜ã‚±ã‚¿åˆ?‚’ã€å¹´æœˆæ—¥ã«åˆ?›¢ã—ãŸã‚«ãƒ¬ãƒ³ãƒ?
552 * オブジェクトを作æ?ã—ã¾ã™ã??‘4ケタ以上ã§åˆã‚ã¦ã€æ™‚åˆ?§’ã‚’å«ã‚?‚«ãƒ¬ãƒ³ãƒ?
553 * を作æ?ã—ã¾ã™ã?
554 *
555 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
556 * @og.rev 5.5.8.2 (2012/11/09) value ã®åˆ¤å®šã«ã€null ã¨ ã‚¼ãƒæ–?—å?を判定ã™ã‚‹ã?
557 *
558 * @param value æ—¥ä»˜ã‘æ–?—å?
559 *
560 * @return カレンãƒ?‚ªãƒ–ジェクãƒ?引数ãŒnullã®å ´åˆã?ã€ç¾åœ¨æ™‚刻)
561 */
562 public static final Calendar getCalendar( final String value ) {
563 Calendar cal = Calendar.getInstance();
564
565 // if( value == null ) { return cal; }
566 if( value == null || value.isEmpty() ) { return cal; } // 5.5.8.2 (2012/11/09) null ã¨ ã‚¼ãƒæ–?—å?を判定ã™ã‚‹ã?
567
568 // 日付表記ã«ä¸è¦ãªæ–?—を削除ã—ã¾ã™ã?
569 String dateStr = parseNumber( value ) ;
570
571 if( dateStr.length() == 6 ) { dateStr = dateStr + "01"; } // yyyyMM01 å½¢å¼ã«ç„¡ç?‚„りåˆã‚ã›ã‚‹ã?
572 else if( dateStr.length() < 8 ) {
573 String errMsg = "日付指定パラメータã«ã€ä¸æ£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚value=[" + value + "]" ;
574 throw new RuntimeException( errMsg );
575 }
576
577 cal.clear(); // 日付文å—å?ãŒå˜åœ¨ã™ã‚‹ã®ã§ã€ã‚«ãƒ¬ãƒ³ãƒ?‚’リセãƒ?ƒˆ
578
579 int year = Integer.parseInt( dateStr.substring( 0,4 ) );
580 int month = Integer.parseInt( dateStr.substring( 4,6 ) ) - 1;
581 int date = Integer.parseInt( dateStr.substring( 6,8 ) );
582
583 int hour=0, minute=0, second=0;
584 if( dateStr.length() >= 14 ) {
585 hour = Integer.parseInt( dateStr.substring( 8,10 ) );
586 minute = Integer.parseInt( dateStr.substring( 10,12 ) );
587 second = Integer.parseInt( dateStr.substring( 12,14 ) );
588 }
589
590 cal.set( year,month,date,hour,minute,second );
591
592 return cal;
593 }
594
595 /**
596 * æŒ?®šã?å¼•æ•°ã®æ—¥ä»˜ã‘æ–?—å?(yyyyMMdd)ã‚ˆã‚Šã€æ—¥ä»˜ã‚’åŠ?®—ã—ã¦è¿”ã—ã¾ã™ã?
597 * マイナスを与ãˆã‚‹ã¨ã€æ¸›ç®—ã—ã¾ã™ã?
598 * 日付以上ã?ç²¾åº¦ã®æ–?—å?を渡ã—ã¦ã‚‚ã?日付ã?ã¿ã®è¨ˆç®—ã¨ãªã‚Šã¾ã™ã?
599 * çµæžœã¯ã€å¼•æ•°ã®æ—¥ä»˜ãƒ•ォーマットã¨ã¯å…¨ã別ã§ã€yyyyMMdd ã®?˜æ–‡å—å½¢å¼ã«ãªã‚Šã¾ã™ã?
600 * 引数㫠null を渡ã™ã¨ã€å®Ÿè¡Œæ™‚ã®æ—¥ä»˜ã‚’ベã?スã¨ã—ã¦å‡¦ç?—ã¾ã™ã?
601 *
602 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
603 *
604 * @param baseDate æ—¥ä»˜ã‘æ–?—å?(yyyyMMdd)
605 * @param plus åŠ?®—ã™ã‚‹æ—¥æ•°(éŽåŽ»ã«ã™ã‚‹ã«ã¯ãƒžã‚¤ãƒŠã‚¹å€¤ã‚’指定ã™ã‚?
606 *
607 * @return çµæžœã®æ—¥ä»?yyyyMMdd)
608 */
609 public static final String getDatePlus( final String baseDate,final int plus ) {
610 Calendar cal = getCalendar( baseDate );
611 cal.add( Calendar.DATE,plus );
612
613 return getDate( cal.getTimeInMillis() , "yyyyMMdd" );
614 }
615
616 /**
617 * ç¾åœ¨ã®æœˆã«ã€æŒ‡å®šã?月数をã?ラスã—ãŸæ—¥ä»˜æ–‡å—å?ã‚’è¿”ã—ã¾ã™ã?
618 * 日付文å—å?ã®ãƒ•ォーマットã?ã€?yyyyMM" ã§ã™ã?
619 * æŒ?®šã™ã‚‹æœˆæ•°ã«ãƒžã‚¤ãƒŠã‚¹ã‚’指定ã™ã‚‹ã¨ã€æ¸›ç®—ã§ãã¾ã™ã?
620 *
621 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
622 *
623 * @param baseDate æ—¥ä»˜ã‘æ–?—å?(yyyyMM)
624 * @param plus åŠ?®—ã™ã‚‹æœˆæ•°(éŽåŽ»ã«ã™ã‚‹ã«ã¯ãƒžã‚¤ãƒŠã‚¹å€¤ã‚’指定ã™ã‚?
625 *
626 * @return æŒ?®šã?月数をã?ラスã—ãŸæ—¥ä»˜æ–‡å—å?(yyyyMM)
627 */
628 public static final String getMonthPlus( final String baseDate,final int plus ) {
629 Calendar cal = getCalendar( baseDate );
630 cal.set( Calendar.DATE, 1 ); // 当月㮠1 æ—¥ã«è¨å®?
631 cal.add( Calendar.MONTH , plus );
632
633 return getDate( cal.getTimeInMillis() , "yyyyMM" );
634 }
635
636 /**
637 * æŒ?®šã?å¼•æ•°ã®æ—¥ä»˜ã‘æ–?—å?(yyyyMMddã€yyyyMMddHHmmss)ã«ã€æ—¥ä»˜ã‚’åŠ?®—ã—ã¦è¿”ã—ã¾ã™ã?
638 * マイナスを与ãˆã‚‹ã¨ã€æ¸›ç®—ã—ã¾ã™ã?
639 *
640 * æŒ?®šã™ã‚‹æ—¥ä»˜ã«ã¯ã€å˜ä½ã‚’付与ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã?
641 * å˜ä½ã?ã€yyyyMMddHHmmss å½¢å¼ã??‘æ–‡å—ã‚’æŒ?®šã—ã¾ã™ã?大æ–?—ã?å°æ–‡å—ã‚‚è˜åˆ¥ã—ã¾ã™ã?
642 * plus="5M" ã¨ã™ã‚Œã°ã€?¼•ã‹æœˆã?plus="5d" ã¨ã™ã‚Œã°ã€?¼•æ—¥ 追åŠ?—ã¾ã™ã?
643 * plus ã«å˜ä½ã‚’付ã‘ãªã??åˆã?ã€tani ã«æŒ?®šã?å˜ä½ã‚’使ã?¾ã™ã?
644 * plus ãã?ã‚‚ã?ãŒã?null ã‹ã?isEmpty ã®å ´åˆã?ã€åŠ ç®—ã?ã€? ã«ãªã‚Šã¾ã™ã?
645 *
646 * baseDate æ–?—å?を日付文å—å?ã«å¤‰æ›å¾Œã?Calendar ã§è¨ˆç®—ã—ã€çµæžœã‚’ã?format å½¢å¼ã«å¤‰æ›ã—ã¾ã™ã?
647 * 引数㫠null を渡ã™ã¨ã€å®Ÿè¡Œæ™‚ã®æ—¥ä»˜ã‚’ベã?スã¨ã—ã¦å‡¦ç?—ã¾ã™ã?
648 *
649 * @og.rev 5.6.1.0 (2013/02/01) æ–°è¦ä½œæ?
650 *
651 * @param baseDate æ—¥ä»˜ã‘æ–?—å?(yyyyMMddã€yyyyMMddHHmmss å½¢å¼ã?日付文å—å?)
652 * @param plus åŠ?®—ã™ã‚‹æ—¥æ•°(日付å˜ä½ã‚’å«ã‚??å˜ä½ã?ã€y,M,d,H,m,s ã®æ–?—ã§ã€å¤§æ–?—å°æ–‡å—ã?区別ãŒã‚りã¾ã?
653 * @param defTani 日付å˜ä½ãŒæœªæŒ?®šã?å ´åˆã?åˆæœŸå˜ä½?'y','M','d','H','m','s' ã®ã©ã‚Œã‹)
654 * @param format è¿”ã™æ—¥ä»˜æ–‡å—å?ã®ãƒ•ォーマッãƒ?yyyyMMddã€yyyyMMddHHmmss)
655 *
656 * @return çµæžœã®æ—¥ä»?yyyyMMdd)
657 * @throws NumberFormatException åŠ?®—ã™ã‚‹æ—¥æ•°ã®å˜ä½ãŒ('y','M','d','H','m','s')以外ã?å ´åˆã?
658 */
659 public static final String getDatePlus( final String baseDate,final String plus,final int defTani,final String format ) {
660
661 int addSu = 1; // åˆæœŸå€¤(plus ã?null ã‚?Empty ã®å ´åˆã?ã€?¼‹ï¼‘ã¨ãªã‚?
662 int tani = defTani;
663
664 if( plus != null && !plus.isEmpty() ) {
665 boolean flag = true; // 日付å˜ä½ã‚’æŒã£ã¦ã?‚‹ã‹ã©ã?‹ã€‚æŒã£ã¦ã?‚‹å ´åˆã?ã€true
666 char ch = plus.charAt( plus.length()-1 ); // æœ?¾Œã?ä¸?–‡å—ã‚’å–å¾?å˜ä½ã‹ã€æ•°å—本ä½?
667 switch( ch ) {
668 case 'y' : tani = Calendar.YEAR; break ;
669 case 'M' : tani = Calendar.MONTH; break ;
670 case 'd' : tani = Calendar.DATE; break ;
671 case 'H' : tani = Calendar.HOUR_OF_DAY; break ;
672 case 'm' : tani = Calendar.MINUTE; break ;
673 case 's' : tani = Calendar.SECOND; break ;
674 default : flag = false; break ; // 日付å˜ä½ã‚’æŒã£ã¦ã?ªã??
675 }
676 if( flag ) {
677 addSu = Integer.parseInt( plus.substring( 0,plus.length()-1 ) ); // 日付å˜ä½?ã‚り
678 }
679 else {
680 addSu = Integer.parseInt( plus ) ; // 日付å˜ä½?ãªã?
681 }
682 }
683
684 Calendar cal = getCalendar( baseDate );
685 cal.add( tani,addSu );
686
687 return getDate( cal.getTimeInMillis() , format );
688 }
689 }