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 * ã“れã¯ã€å?部ã§ã€parseNumber(String) 処ç?«ã‚ˆã‚Šã€ä¸è¦ãªãƒ•ォーマット記å·ã‚’削除ã—ã¾ã™ã?
196 * ã“ã“ã§ã¯ã€åŸºæœ¬çš?«ã¯ã€?¼–æ–‡å—ï¼?yyyMM?‰ã??˜æ–‡å—ï¼?yyyMMdd?‰ã??‘4文å—ï¼?yyyMMddHHmmss??
197 * ã®æ—¥ä»˜æ–‡å—å?を作æ?ã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã?¾ã™ãŒã€æŒ‡å®šã?æ¡æ•°ä»¥å¤–ã?ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã?
198 *
199 * 引数ãŒã?null â‡?æ¡æ•°ã«ç„¡é–¢ä¿‚ã«ã€ç©ºæ–?—å?ã‚’è¿”ã™ã€?
200 * å¼•æ•°ã®æ¡æ•°ãŒä¸?? â‡?ãã?値を返ã™ã€?
201 * å¼•æ•°ã®æ¡æ•°ãŒä¸ä¸?? â‡?エラー
202 * ãŸã ã—ã?å¼•æ•°ã®æœ?¤§é•·ã¯ã€?¼‘4ケタã«åˆ¶é™ã—ã¦ã?¾ã™ã?
203 *
204 * ã“ã?メソãƒ?ƒ‰ã§ã¯ã€æ—¥ä»˜ã¨ã—ã¦æˆç«‹ã—ã¦ã?‚‹ã‹ã©ã?‹??9999999ãªã©?‰ã?判定ã—ã¦ã?¾ã›ã‚“ã€?
205 *
206 * @og.rev 5.6.6.0 (2013/07/05) メソãƒ?ƒ‰ã®å†?®¹ã‚’ç§»ã™ã?
207 *
208 * @param value ä»»æ„ã?æ—¥ä»˜ã‘æ–?—å?
209 * @param size 変æ›ã—ãŸã?¡æ•°
210 *
211 * @return æ•°å—ã ã‘ã§æ§‹æ?ã•れる文å—å??ˆä¾‹ï¼?0010417154822??nullã¯ã‚¼ãƒæ–?—å?ã‚’è¿”ã—ã¾ã?
212 */
213 public static final String parseDate( final String value , final int size ) {
214 return parseDate( value , size , size ); // æœ?°ã¨æœ?¤§ã‚’åŒã˜å?ã«ã™ã‚‹ã€?
215 }
216
217 /**
218 * 日付文å—å?ã®æ¡æ•°ã®æ•´åˆæ?ã‚’å–りã¾ã™ã?
219 * ã“れã¯ã€å?部ã§ã€parseNumber(String) 処ç?«ã‚ˆã‚Šã€ä¸è¦ãªãƒ•ォーマット記å·ã‚’削除ã—ã¾ã™ã?
220 * ã“ã“ã§ã¯ã€åŸºæœ¬çš?«ã¯ã€?¼–æ–‡å—ï¼?yyyMM?‰ã??˜æ–‡å—ï¼?yyyMMdd?‰ã??‘4文å—ï¼?yyyMMddHHmmss??
221 * ã®æ—¥ä»˜æ–‡å—å?を作æ?ã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã?¾ã™ãŒã€ãれ以外ã?æ¡æ•°ã§ã‚‚下記ã?ルールã«å¾“ã£ã¦
222 * 処ç?•れã¾ã™ã?
223 *
224 * 引数ãŒã?null â‡?æ¡æ•°ã«ç„¡é–¢ä¿‚ã«ã€ç©ºæ–?—å?ã‚’è¿”ã™ã€?
225 * å¼•æ•°ã®æ¡æ•°ãŒç¯?›²å†? â‡?以下ã?処ç?‚’実行ã™ã‚‹ã?
226 * å¼•æ•°ã®æ¡æ•°ã‚’åŒã? â‡?ãã?ã¾ã¾è¿”ã™ã€?
227 * å¼•æ•°ã®æ¡æ•°ã‚ˆã‚Šå¤§ãã„ â‡?余をカãƒ?ƒˆã—ã¦ã€å¼•æ•°ã®æœ?¤§é•·ã«ãã‚ãˆã‚‹ã€?
228 * å¼•æ•°ã®æ¡æ•°ã«è¶³ã‚Šãªã?â‡?"20000101000000" ã®æ–?—å?ã®éƒ¨åˆ?–‡å—å?ã‚’çµåˆã•ã›ã¦ã€å¼•æ•°ã®æœ?¤§é•·ã«ãã‚ãˆã‚‹ã€?
229 * ãŸã ã—ã?å¼•æ•°ã®æœ?¤§é•·ã¯ã€?¼‘4ケタã«åˆ¶é™ã—ã¦ã?¾ã™ã?
230 *
231 * ã“ã?メソãƒ?ƒ‰ã§ã¯ã€æ—¥ä»˜ã¨ã—ã¦æˆç«‹ã—ã¦ã?‚‹ã‹ã©ã?‹??9999999ãªã©?‰ã?判定ã—ã¦ã?¾ã›ã‚“ã€?
232 *
233 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
234 * @og.rev 5.6.1.1 (2013/02/08) æ¡æ•°ãƒã‚§ãƒ?‚¯å°Žå?。6æ¡ä»¥ä¸‹ã ã¨ã‚¨ãƒ©ãƒ¼ã«ã™ã‚‹ã€?
235 * @og.rev 5.6.6.0 (2013/07/05) æ¡æ•°ãƒã‚§ãƒ?‚¯ã®æœ?°?æœ?¤§æŒ?®?
236 *
237 * @param value ä»»æ„ã?æ—¥ä»˜ã‘æ–?—å?
238 * @param minSize 変æ›ã—ãŸã?¡æ•°ã®æœ?°å?
239 * @param maxSize 変æ›ã—ãŸã?¡æ•°ã®æœ?¤§å€¤
240 *
241 * @return æ•°å—ã ã‘ã§æ§‹æ?ã•れる文å—å??ˆä¾‹ï¼?0010417154822??nullã¯ã‚¼ãƒæ–?—å?ã‚’è¿”ã—ã¾ã?
242 */
243 // public static final String parseDate( final String value , final int size ) {
244 public static final String parseDate( final String value , final int minSize , final int maxSize ) {
245 if( value == null ) { return ""; }
246
247 String rtn = parseNumber( value );
248
249 // å¼•æ•°ã®æœ?¤§é•·ã¯ã€?¼‘4ケタã«åˆ¶é™ã—ã¦ã?¾ã™ã?
250 if( maxSize > 14 ) {
251 String errMsg = "日付登録ã«è¨±å¯ã§ãã‚‹æœ?¤§æ¡æ•°ã¯ã€?¼‘4ケタã§ã™ã?"
252 + " maxSize=[" + maxSize + "]" ;
253 throw new RuntimeException( errMsg );
254 }
255
256 // int maxSize = ( size > 14 ) ? 14 : size ; // å…ˆã«æœ?¤§ã‚µã‚¤ã‚ºã‚’求ã‚ã¦ãŠã
257 int len = rtn.length() ;
258
259 if( len == maxSize ) { rtn = value; }
260 // else if( len > maxSize ) { rtn = rtn.substring( 0,maxSize ); }
261 // 5.6.1.1 (2013/02/08) æ¡æ•°ãƒã‚§ãƒ?‚¯å°Žå?。6æ¡ä»¥ä¸‹ã ã¨ã‚¨ãƒ©ãƒ¼ã«ã™ã‚‹ã€?
262 // else if( len < 6 ) {
263 // 5.6.6.0 (2013/07/05) æ¡æ•°ãƒã‚§ãƒ?‚¯ã®æœ?°?æœ?¤§æŒ?®šã§ã€ç¯?›²å¤–ã?エラー
264 else if( len < minSize || len > maxSize ) {
265 String errMsg = "日付文å—å?ã«ã€ä¸æ£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚最å°["
266 + minSize + "] ã‹ã‚‰ã€æœ€å¤§[" + maxSize + "]ã®ç¯?›²ã§æŒ?®šã—ã¦ãã ã•ã„ã€?
267 + " value=[" + value + "]" ;
268 throw new RuntimeException( errMsg );
269 }
270 else {
271 rtn = rtn + "20000101000000".substring( len,maxSize ) ; // ä¸é–“æ–‡å—å?ã‚’åŠ ãˆã‚‹ã€?
272 }
273
274 return rtn ;
275 }
276
277 /**
278 * 日付文å—å?ã®å޳å¯?ªæ•´åˆæ?ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
279 * ã“ã“ã§æŒ?®šã§ãã‚‹ã®ã¯ã€?¼˜æ–‡å—ï¼?yyyMMdd?‰ã??‘4文å—ï¼?yyyMMddHHmmss?‰ã?ã©ã¡ã‚‰ã‹ã®
280 * æ•°å—ã ã‘ã?日付文å—å?ã§ã‚りã€ãれãŒã€æ—¥ä»˜ã¨ã—ã¦æ£ã—ã„ã‹ã©ã?‹ã®ãƒã‚§ãƒ?‚¯ã‚’行ã„ã¾ã™ã?
281 * æ£ã—ã‘れã?ã€true ã‚’ã?é–“é•ã£ã¦ã?‚Œã°ã€false ã‚’è¿”ã—ã¾ã™ã?
282 * ã“ã“ã§ã¯ã€?0120230?ˆï¼’月?“ï¼æ—¥?‰ãªã©ã®æ—¥ä»˜ã‚„ã€?0120101235960 ãªã©ã‚?false ã«ãªã‚Šã¾ã™ã?
283 * 引数ãŒã?null ãŠã‚ˆã³ã€ç©ºæ–?—å?ã®å ´åˆã‚‚ã€false ã‚’è¿”ã—ã¾ã™ã?ã§ã€?¿ã‘ãŸã??åˆã?ã€äº‹å‰ã«
284 * 判定ã—ã¦ãŠã„ã¦ãã ã•ã„ã€?
285 *
286 * å†?ƒ¨å‡¦ç?¨ã—ã¦ã¯ã€DateFormat ã§ã€setLenient( false ) ã‚’è¨å®šã™ã‚‹ã“ã¨ã§ã€?
287 * æ—¥ä»?時刻解æžã‚’厳å¯?«è§£æžã™ã‚‹ã«ã—ã¦ã€ParseException ãŒç™ºç”Ÿã—ãªã?‹ã©ã?‹åˆ¤å®šã—ã¦ã?¾ã™ã?
288 *
289 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
290 *
291 * @param value æ•°å—ã ã‘ã§æ§‹æ?ã•ã‚Œã‚‹æ—¥ä»˜ã‘æ–?—å?
292 *
293 * @return true:日付ã¨ã—ã¦æ£ã—ã„å ´å?false:日付ã¨ã—ã¦é–“é•ã£ã¦ã?‚‹å ´å?
294 */
295 public static final boolean isStrict( final String value ) {
296 if( value == null || ( value.length() != 8 && value.length() != 14 ) ) { return false; }
297
298 // 日付ã?厳å¯?ªãƒã‚§ãƒ?‚¯
299 String form = (value.length() == 8) ? "yyyyMMdd" : "yyyyMMddHHmmss" ;
300 DateFormat formatter = new SimpleDateFormat( form,Locale.JAPAN );
301 formatter.setLenient( false ); // æ—¥ä»?時刻解æžã‚’厳å¯?«è¡Œã†(false=厳å¯?
302
303 boolean flag ;
304 try {
305 formatter.parse( value );
306 flag = true;
307 }
308 catch( ParseException ex ) {
309 flag = false;
310 }
311
312 return flag;
313 }
314
315 /**
316 * 日付関係ã?æƒ??を簡易的ã«å‡¦ç?—ã¾ã™ã?
317 *
318 * CC引数ã®åŠ?¸›ç®—パラメータã¯ã€? ã§ã™ã?
319 *
320 * @og.rev 5.7.4.1 (2014/03/14) CC 引数を拡張ã™ã‚‹ãŸã‚ã€æ—§ãƒ¡ã‚½ãƒ?ƒ‰ã‚’å?ç¾ã—ã¦ãŠãã¾ã™ã?
321 *
322 * @param key フォーマットã?予ç´?ª?
323 * @param prmA 基準ã¨ãªã‚‹æ—¥ä»?nullã®å ´åˆã?ã€å?ç?™‚刻)
324 * @param prmB 処ç?‚³ãƒžãƒ³ãƒ?
325 *
326 * @return メãƒ?‚»ãƒ¼ã‚¸æƒ??
327 * @see #getDateFormat( String , String ,String , int )
328 */
329 public static final String getDateFormat( final String key ,final String prmA ,final String prmB ) {
330 return getDateFormat( key,prmA,prmB,0 );
331 }
332
333 /**
334 * 日付関係ã?æƒ??を簡易的ã«å‡¦ç?—ã¾ã™ã?
335 *
336 * 第ä¸?¼•æ•° "XXXX" ã¯ã€æ—¥ä»˜å?ç?‚’行ã†ãƒ•ォーマットã?予ç´?ªžã«ãªã£ã¦ã?¾ã™ã?
337 * ・YMDã€???šï¼˜æ–‡å—ã?4-2-2年月日ãƒ??ã‚¿(yyyyMMdd)を扱ã?¾ã™ã?
338 * ・Y2MDã€??šï¼–æ–‡å—ã?2-2-2年月日ãƒ??ã‚¿(yyMMdd)を扱ã?¾ã™ã?
339 * ・YMã€?? ?šï¼–æ–‡å—ã?4-2年月データ(yyyyMM)を扱ã?¾ã™ã?
340 * ・HMSã€???šï¼–æ–‡å—ã?2-2-2時å?秒データ(HHmmss)を扱ã?¾ã™ã?
341 * ・YMDHMS ?šï¼‘4文å—ã?4-2-2-2-2-2年月日時å?秒データ(yyyyMMddHHmmss)を扱ã?¾ã™ã?
342 * ・EEEã€???šæ›œæ—¥ã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒã‚±ãƒ¼ãƒ«ã§è¡¨ç¤ºã—ã¾ã™ã?
343 *
344 * F付ãã¯ã€ãƒ•ォーマットã•ã‚ŒãŸæ—¥ä»˜ã‚’è¿”ã—ã¾ã™ã?
345 * ・YMDFã€??šï¼‘ï¼æ–‡å—ã?日付表ç¾(yyyy/MM/dd)を扱ã?¾ã™ã?
346 * ・Y2MDFã€?¼šï¼˜æ–‡å—ã?日付表ç¾(yy/MM/dd)を扱ã?¾ã™ã?
347 * ・YMFã€???šï¼—æ–‡å—ã?日付表ç¾(yyyy/MM)を扱ã?¾ã™ã?
348 * ・HMSFã€??šï¼˜æ–‡å—ã?時刻表ç¾(HH:mm:ss)を扱ã?¾ã™ã?
349 * ・YMDHMSF?šï¼‘9文å—ã?日付表ç¾(yyyy/MM/dd HH:mm:ss)を扱ã?¾ã™ã?
350 * ・MDFã€???šï¼•æ–‡å—ã?月日表ç¾(MM/dd)を扱ã?¾ã™ã?
351 * ・MDEFã€??šï¼•æ–‡å—ï¼‹æ›œæ—¥ã®æœˆæ—¥è¡¨ç¾(MM/dd(EEE))を扱ã?¾ã™ã?
352 * ・MD2Fã€??šå’Œæš¦ã®æœˆæ—¥è¡¨ç¾(MMæœ?dæ—¥)を扱ã?¾ã™ã?(5.5.5.2 追åŠ?
353 * ・GYMDFã€?¼šå’Œæš¦ã®å¹´æœˆæ—¥è¡¨ç¾(GGGGyyyyå¹´MMæœ?dæ—¥)を扱ã?¾ã™ã?
354 * ・G2YMDF ?šå’Œæš¦ã®æ—¥ä»˜è¡¨ç¾(Gyyyy/MM/dd)を扱ã?¾ã™ã?
355 * ・GYMFã€??šå’Œæš¦ã®å¹´æœˆè¡¨ç¾(GGGGyyyyå¹´MMæœ?を扱ã?¾ã™ã?
356 * ・GYFã€???šå’Œæš¦ã®å¹´è¡¨ç¾(GGGGyyyy)を扱ã?¾ã™ã?
357 *
358 * ãªãŠã?上記以外ã?フォーマットをæŒ?®šã™ã‚‹å?åˆã?ã€XXXX部åˆ?«ç›´æŽ¥è¨˜è¿°ã§ãã¾ã™ã?(5.5.5.2 追åŠ?
359 * ãŸã ã—ã?基本çš?«ã¯ã€è?由フォーマットã?ã€ã‚¨ãƒ©ãƒ¼ãƒã‚§ãƒ?‚¯ãŒãªã?‚ºã€ä½¿ã‚ãªã?§ãã ã•ã„ã€?
360 *
361 * 第二引数 AA ã¯ã€åŸºæº–ã¨ãªã‚‹æ—¥ä»˜ã‚’ã€yyyyMMddå½¢å¼ã§æŒ?®šã—ã¾ã™ã?nullã®å ´åˆã?ã€ç¾åœ¨æ™‚刻を使用ã—ã¾ã™ã?
362 * æŒ?®šã§ãる日付ã?ã€yyyyMMddå½¢å¼ã‚’推奨ã—ã¾ã™ãŒã€?/' , '-' , ' ' , ':' を削除ã—ã¦ä½¿ã?¾ã™ã?
363 * ?–æ¡ã?å ´åˆã?ã€yyyyMM + 01 ã¨ã—ã??˜ã‚±ã‚¿ã®å ´åˆã?ã€yyyyMMdd ã¨ã—ã?14ケタ以上ã?å ´åˆã?ã€å‰åŠï¼‘4文å—ã‚’
364 * yyyyMMddHHmmss ã¨ã—ã¦å‡¦ç?—ã¾ã™ã?ãれ以外ã?æ¡æ•°ã®å ´åˆã?ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã?
365 * ãŸã¨ãˆã?ã€?2012/09/05 16:52:36" ã®ã‚ˆã†ãªãƒ•ォーマットデータã®å ´åˆã?'/' , '-' , ' ' , ':' を削除ã—ã¦
366 * "20120905165236" ã«å¤‰æ›å¾Œã?日付オブジェクトã«å¤‰æ›ã•れã¾ã™ã?
367 *
368 * 第三引数 BB ã¯ã€æ—¥ä»˜ã«ã¤ã?¦ã®åŠ?¸›ç®—å?ç?‚’行ã†ãŸã‚ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’æŒ?®šã—ã¾ã™ã?
369 * nullã®å ´åˆã?ã€ãªã«ã‚‚åŠ æ¸›ç®—å?ç?‚’行ã„ã¾ã›ã‚“ã€?
370 * ・SD ?šå½“æœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(当月?‘æ—¥)ã€?C引数ã¯ã€?N:N月å‰ã€?:当月(=SD)ã€N:N月後ã?-1:BSD ã¨åŒã˜ã€?:ASD ã¨åŒã˜
371 * ・ED ?šå½“æœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(当月月末)ã€?C引数ã¯ã€?N:N月å‰ã€?:当月(=ED)ã€N:N月後ã?-1:BED ã¨åŒã˜ã€?:AED ã¨åŒã˜
372 * ・SW ?šæ—¥ä»˜å?ç??週åˆã‚(月曜日)ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?日付ã?当日よりå‰ã«ç§»å‹•ã—ã¾ã™ã?CC引数ã¯ã€?N:N週å‰ã?0:今é?(=SW)ã€N:N週å¾?
373 * ・EW ?šæ—¥ä»˜å?ç??週末(日曜日)ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?日付ã?当日より後ã‚ã«ç§»å‹•ã—ã¾ã™ã?CC引数ã¯ã€?N:N週å‰ã?0:今é?(=EW)ã€N:N週å¾?
374 * ・H1 ??HXXX ?šæ™‚ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?H1ãªã‚‰ï¼‘時間後ã?H24 ãªã‚‰ï¼’4時間å¾?5.5.5.6 (2012/08/31) 追åŠ?
375 * ・D1 ??DXXX ?šæ—¥ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?D1ãªã‚‰ç¿Œæ—¥ã€D200 ãªã‚?00æ—¥å¾?
376 * ・M1 ??MXXX ?šæœˆã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?M1ãªã‚‰ç¿Œæœˆã€M6 ãªã‚‰åŠå¹´å¾?
377 * ・BSD ??有閑)å…ˆæœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(先月?‘æ—¥)(5.5.5.2 追åŠ?。SD -1 ã¨åŒç?
378 * ・BED ??有閑)å…ˆæœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(先月月末)(5.5.5.2 追åŠ?ã€?D -1 ã¨åŒç?
379 * ・ASD ??有閑)ç¿Œæœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(翌月?‘æ—¥)(5.5.5.2 追åŠ?。SD 1 ã¨åŒç?
380 * ・AED ??有閑)ç¿Œæœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(翌月月末)(5.5.5.2 追åŠ?ã€?D 1 ã¨åŒç?
381 *
382 * CC 引数ã¯ã€ç‰¹åˆ¥ãªå‡¦ç?§ã€BB 引数ã«å¯¾ã—ã¦ã€åŠ ç®—ã?減算ã?ãŸã‚ã®æ•°å—ã‚’æŒ?®šã§ãã¾ã™ã?(5.7.4.1 (2014/03/14) 追åŠ?
383 * 従æ¥ã¯ã€BB 引数ãŒã?"H" , "D" , "M" ã® ?‘æ–‡å—パラメータã®å ´åˆã?ã¿åˆ©ç”¨å¯èƒ½ã§ã—ãŸã€?
384 *
385 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
386 * @og.rev 5.6.1.1 (2013/02/08) prmB処ç?‚’ã€calendarCalc メソãƒ?ƒ‰ã¸ç§»å‹?
387 * @og.rev 5.7.4.1 (2014/03/14) CC 引数を拡張
388 *
389 * @param key フォーマットã?予ç´?ª?
390 * @param prmA 基準ã¨ãªã‚‹æ—¥ä»?nullã®å ´åˆã?ã€å?ç?™‚刻)
391 * @param prmB 処ç?‚³ãƒžãƒ³ãƒ?
392 * @param intC åŠ?¸›ç®—å?ç?‚’行ã†ãŸã‚ã®æ•°å—ã?0 ã¯ã€BB引数ã®å¾“æ¥è¨ˆç®—ã?ã¾ã¾ã€?
393 *
394 * @return メãƒ?‚»ãƒ¼ã‚¸æƒ??
395 * @see #getDateFormat( String , String ,String )
396 * @see #getCalendar( String ) AA 引数 ã‹ã‚‰ã‚«ãƒ¬ãƒ³ãƒ?‚ªãƒ–ジェクトを作æ?ã—ã¾ã™ã?
397 * @see #calendarCalc( Calendar , String , int ) BB 引数ã€CC 引数をå?ã«ã€æ—¥ä»˜è¨ˆç®—ã—ã¾ã™ã?
398 */
399 public static final String getDateFormat( final String key ,final String prmA ,final String prmB ,final int intC ) {
400
401 // prmA ã?null ã®å ´åˆã?ã€ãã®ã¾ã¾ã€ç¾åœ¨æ™‚刻ãŒä½¿ã‚れã¾ã™ã?
402 Calendar now = getCalendar( prmA );
403
404 // 5.6.1.1 (2013/02/08) getDateFormat( String ,String ,String ) ã‹ã‚‰åˆ?›¢ã€?
405 // calendarCalc( now,prmB );
406 calendarCalc( now,prmB,intC ); // 5.7.4.1 (2014/03/14) CC 引数を拡張
407
408 String format = DATE_FORMAT.get( key );
409 if( format == null ) {
410 // DATE_FORMAT ã«å˜åœ¨ã—ãªã?ƒ•ォーマットをæŒ?®šã—ã¦ã‚‚ã?エラーã«ã—ã¾ã›ã‚“ã€?
411 // ãŸã ã—ã?後å?ç?§ãƒ•ォーマットエラーã«ãªã‚‹å¯èƒ½æ€§ã¯æ®‹ã‚Šã¾ã™ã?
412 format = key; // 5.5.5.2 (2012/08/18) 自由フォーマット指�
413 }
414
415 //5.5.0.2 å…ˆé?Gã®å ´åˆã?和暦ãªã®ã§formatterã®Localeを変更ã™ã‚‹
416 DateFormat formatter = null;
417 if( key.indexOf('G') == 0 ){
418 formatter = new SimpleDateFormat( format, new Locale("ja","JP","JP"));
419 }
420 else{
421 formatter = new SimpleDateFormat( format,Locale.JAPAN );
422 }
423
424 return formatter.format( now.getTime() );
425 }
426
427 /**
428 * é–‹å§‹å‰è¨å®šå?ã€ã¾ãŸã? 終äº?¾Œè¨å®šå?ã®æ–?—å?ã‹ã‚‰ã€ã‚ªãƒ—ションæ–?—å?ã‚’åˆæˆã—ã¾ã™ã?
429 * 基準ã¨ãªã‚‹æ—¥ä»˜ã«è¨ˆç®—ã—ãŸçµæžœã‚’åæ˜?•ã›ã¾ã™ã?
430 *
431 * CC引数ã®åŠ?¸›ç®—パラメータã¯ã€? ã§ã™ã?
432 *
433 * @og.rev 5.7.4.1 (2014/03/14) CC 引数を拡張ã™ã‚‹ãŸã‚ã€æ—§ãƒ¡ã‚½ãƒ?ƒ‰ã‚’å?ç¾ã—ã¦ãŠãã¾ã™ã?
434 *
435 * @param now 基準ã¨ãªã‚‹æ—¥ä»˜ï¼?alendarオブジェクトï¼?
436 * @param prmB 処ç?‚³ãƒžãƒ³ãƒ?
437 */
438 public static final void calendarCalc( final Calendar now,final String prmB ) {
439 calendarCalc( now,prmB,0 );
440 }
441
442 /**
443 * é–‹å§‹å‰è¨å®šå?ã€ã¾ãŸã? 終äº?¾Œè¨å®šå?ã®æ–?—å?ã‹ã‚‰ã€ã‚ªãƒ—ションæ–?—å?ã‚’åˆæˆã—ã¾ã™ã?
444 * 基準ã¨ãªã‚‹æ—¥ä»˜ã«è¨ˆç®—ã—ãŸçµæžœã‚’åæ˜?•ã›ã¾ã™ã?
445 *
446 * prmB ã¯ã€æ—¥ä»˜ã«ã¤ã?¦ã®åŠ?¸›ç®—å?ç?‚’行ã†ãŸã‚ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’æŒ?®šã—ã¾ã™ã?
447 * ・SD ?šå½“æœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(当月?‘æ—¥)ã€?C引数ã¯ã€?N:N月å‰ã€?:当月(=SD)ã€N:N月後ã?-1:BSD ã¨åŒã˜ã€?:ASD ã¨åŒã˜
448 * ・ED ?šå½“æœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(当月月末)ã€?C引数ã¯ã€?N:N月å‰ã€?:当月(=ED)ã€N:N月後ã?-1:BED ã¨åŒã˜ã€?:AED ã¨åŒã˜
449 * ・SW ?šæ—¥ä»˜å?ç??週åˆã‚(月曜日)ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?日付ã?当日よりå‰ã«ç§»å‹•ã—ã¾ã™ã?CC引数ã¯ã€?N:N週å‰ã?0:今é?(=SW)ã€N:N週å¾?
450 * ・EW ?šæ—¥ä»˜å?ç??週末(日曜日)ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?日付ã?当日より後ã‚ã«ç§»å‹•ã—ã¾ã™ã?CC引数ã¯ã€?N:N週å‰ã?0:今é?(=EW)ã€N:N週å¾?
451 * ・H1 ??HXXX ?šæ™‚ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?H1ãªã‚‰ï¼‘時間後ã?H24 ãªã‚‰ï¼’4時間å¾?5.5.5.6 (2012/08/31) 追åŠ?
452 * ・D1 ??DXXX ?šæ—¥ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?D1ãªã‚‰ç¿Œæ—¥ã€D200 ãªã‚?00æ—¥å¾?
453 * ・M1 ??MXXX ?šæœˆã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚ã¾ã™ã?M1ãªã‚‰ç¿Œæœˆã€M6 ãªã‚‰åŠå¹´å¾?
454 * ・BSD ?šå?月ã?æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(先月?‘æ—¥)(5.5.5.2 追åŠ?。SD-1 ã¨åŒç?
455 * ・BED ?šå?月ã?æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(先月月末)(5.5.5.2 追åŠ?ã€?D-1 ã¨åŒç?
456 * ・ASD ?šç¿Œæœˆã®æœ??ã®æ—¥ä»˜ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(翌月?‘æ—¥)(5.5.5.2 追åŠ?。SD1 ã¨åŒç?
457 * ・AED ?šç¿Œæœˆã®æœ?¾Œã?日付ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?(翌月月末)(5.5.5.2 追åŠ?ã€?D1 ã¨åŒç?
458 * ・数å—:日を指定ã?åˆ? ã‘é?ã‚ã¾ã™ã?D1 ??DXXX ã®ç°¡ç•¥ç³»
459 *
460 * CC 引数ã¯ã€ç‰¹åˆ¥ãªå‡¦ç?§ã€BB 引数ã«å¯¾ã—ã¦ã€åŠ ç®—ã?減算ã?ãŸã‚ã®æ•°å—ã‚’æŒ?®šã§ãã¾ã™ã?(5.7.4.1 (2014/03/14) 追åŠ?
461 * HXXX,DXXX,MXXX å½¢å¼ã«ã€CC 引数を付ã‘ãŸå?åˆã?ã€XXX ã«ã•らã«åŠ?®—ã•れã¾ã™ã?
462 * prmB ã«ã€æ•°å—を使用ã—ãŸå ´åˆã?(コマンドã§ãªã??å?ã«ã‚‚ã?CC 引数ã¯ã€åŠ ç®—ã•れã¾ã™ã?
463 *
464 * @og.rev 5.6.1.1 (2013/02/08) getDateFormat( String ,String ,String ) ã‹ã‚‰åˆ?›¢ã€?
465 * @og.rev 5.7.4.1 (2014/03/14) H1 ??HXXX ?šæ™‚ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚る処ç?Œå®Ÿè£?•れã¦ã?ªã‹ã£ãŸã?
466 * @og.rev 5.7.4.1 (2014/03/14) CC 引数追�
467 *
468 * @param now 基準ã¨ãªã‚‹æ—¥ä»˜ï¼?alendarオブジェクトï¼?
469 * @param prmB 処ç?‚³ãƒžãƒ³ãƒ?
470 * @param intC åŠ?¸›ç®—å?ç?‚’行ã†ãŸã‚ã®æ•°å—ã?0 ã¯ã€BB引数ã®å¾“æ¥è¨ˆç®—ã?ã¾ã¾ã€?
471 */
472 public static final void calendarCalc( final Calendar now , final String prmB , final int intC ) {
473
474 // 基準ã?ã€intC == 0 ã®å ´å?
475 if( prmB != null ) {
476 if( "SD".equals( prmB ) ) { // (当月?‘æ—¥)
477 if( intC != 0 ) { now.add( Calendar.MONTH,intC ); } // 5.7.4.1 (2014/03/14) CC 引数追�
478 now.set( Calendar.DATE,1 );
479 }
480 else if( "ED".equals( prmB ) ) { // (当月月末)
481 if( intC != 0 ) { now.add( Calendar.MONTH,intC ); } // 5.7.4.1 (2014/03/14) CC 引数追�
482 now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) );
483 }
484 else if( "BSD".equals( prmB ) ) { // (先月?‘æ—¥)
485 // 5.7.4.1 (2014/03/14) CC 引数追�
486 now.add( Calendar.MONTH,intC-1 ); now.set( Calendar.DATE,1 );
487 // now.roll( Calendar.MONTH,false ); now.set( Calendar.DATE,1 );
488 }
489 else if( "BED".equals( prmB ) ) { // (先月月末)
490 // 5.7.4.1 (2014/03/14) CC 引数追�
491 now.add( Calendar.MONTH,intC-1 ); now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) );
492 // now.roll( Calendar.MONTH,false ); now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) );
493 }
494 else if( "ASD".equals( prmB ) ) { // (翌月?‘æ—¥)
495 // 5.7.4.1 (2014/03/14) CC 引数追�
496 now.add( Calendar.MONTH,intC+1 ); now.set( Calendar.DATE,1 );
497 // now.roll( Calendar.MONTH,true ); now.set( Calendar.DATE,1 );
498 }
499 else if( "AED".equals( prmB ) ) { // (翌月月末)
500 // 5.7.4.1 (2014/03/14) CC 引数追�
501 now.add( Calendar.MONTH,intC+1 ); now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) );
502 // now.roll( Calendar.MONTH,true ); now.set( Calendar.DATE,now.getActualMaximum( Calendar.DATE ) );
503 }
504 else if( "SW".equals( prmB ) ) { // 週åˆã‚(月曜日)ã‚»ãƒ?ƒˆ
505 // 5.7.4.1 (2014/03/14) CC 引数追�
506 if( intC != 0 ) { now.add( Calendar.DATE,intC*7 ); } // ã¾ãšã?基準ã?日付を週å˜ä½ã§åŠ?¸›ç®—ã™ã‚‹ã?
507
508 // 日付型æ–?—å?入力データã®é–‹å§‹æ—¥ã‚’月曜日ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
509 // SUNDAY=1 , MONDAY=2 ã«ãªã‚Šã¾ã™ã?月曜日ã¨ã®å·®ã?‘ã€å‰ã«æˆ»ã—ã¾ã™ã?
510 // æŒ?®šæ—¥ãŒæ—¥æ›œæ—¥ã®å ´åˆã?ã€æœˆæ›œæ—¥ã¾ã§æˆ»ã—ã¾ã™ã?
511
512 int shu = now.get( Calendar.DAY_OF_WEEK ) - Calendar.MONDAY ;
513
514 if( shu > 0 ) { now.add( Calendar.DATE, -shu ); }
515 else if( shu < 0 ) { now.add( Calendar.DATE, -6 ); }
516 }
517 else if( "EW".equals( prmB ) ) { // 週末(日曜日)ã«ã‚»ãƒ?ƒˆ
518 // 5.7.4.1 (2014/03/14) CC 引数追�
519 if( intC != 0 ) { now.add( Calendar.DATE,intC*7 ); } // ã¾ãšã?基準ã?日付を週å˜ä½ã§åŠ?¸›ç®—ã™ã‚‹ã?
520
521 // 日付型æ–?—å?入力データã®çµ‚äº?—¥ã‚’日曜日ã«ã‚»ãƒ?ƒˆã—ã¾ã™ã?
522 // SUNDAY=1 , MONDAY=2 ã«ãªã‚Šã¾ã™ã?日曜日ã«ãªã‚‹ã‚ˆã?«ã€å?ã«é€²ã‚ã¾ã™ã?
523 int shu = now.get( Calendar.DAY_OF_WEEK ) ;
524 if( shu != Calendar.SUNDAY ) { now.add( Calendar.DATE, 8-shu ); }
525 }
526 // 5.7.4.1 (2014/03/14) H1 ??HXXX ?šæ™‚ã‚’æŒ‡å®šã?åˆ? ã‘é?ã‚る処ç?Œå®Ÿè£?•れã¦ã?ªã‹ã£ãŸã?
527 // else if( prmB.startsWith( "H" ) && prmB.length() > 1 ) {
528 else if( prmB.startsWith( "H" ) ) {
529 // int hour = Integer.parseInt( prmB.substring( 1 ) );
530 int hour = intC ;
531 if( prmB.length() > 1 ) { hour += Integer.parseInt( prmB.substring( 1 ) ); }
532 now.add( Calendar.HOUR_OF_DAY , hour );
533 }
534 // else if( prmB.startsWith( "D" ) && prmB.length() > 1 ) {
535 else if( prmB.startsWith( "D" ) ) {
536 // int day = Integer.parseInt( prmB.substring( 1 ) );
537 int day = intC ;
538 if( prmB.length() > 1 ) { day += Integer.parseInt( prmB.substring( 1 ) ); }
539 now.add( Calendar.DATE, day );
540 }
541 // else if( prmB.startsWith( "M" ) && prmB.length() > 1 ) {
542 else if( prmB.startsWith( "M" ) ) {
543 // int month = Integer.parseInt( prmB.substring( 1 ) );
544 int month = intC ;
545 if( prmB.length() > 1 ) { month += Integer.parseInt( prmB.substring( 1 ) ); }
546 now.add( Calendar.MONTH , month );
547 }
548 else {
549 // 上記ã?パターン以外ã?ã€æ•°å—ï¼ˆåŠ æ¸›ç®—ã™ã‚‹æ—¥æ•°?‰ãªã®ã§ã€å¤‰æ›ã§ããªã‘れã°ã€ãƒ•ォーマットエラー
550 try {
551 // int day = Integer.parseInt( prmB );
552 int day = Integer.parseInt( prmB ) + intC ; // 5.7.4.1 (2014/03/14) CC 引数追�
553 now.add( Calendar.DATE, day );
554 }
555 catch( NumberFormatException ex ) {
556 String errMsg = "日付変数パラメータã«ã€ä¸æ£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚以下ã?ä¸ã‹ã‚‰æŒ?®šã—ãªãŠã—ã¦ãã ã•ã„ã€?
557 + "æŒ?®šå¯èƒ½?š[SD,ED,BSD,BED,ASD,AED,SW,EW,H1?žHXXX,D1?žDXXX,M1?žMXXX]"
558 + " prmB=[" + prmB + "]" ;
559 throw new RuntimeException( errMsg,ex );
560 }
561 }
562 }
563 }
564
565 /**
566 * æŒ?®šã?å¼•æ•°ã®æ—¥ä»˜ã‘æ–?—å?よりã€ã‚«ãƒ¬ãƒ³ãƒ?‚ªãƒ–ジェクトを作æ?ã—ã¾ã™ã?
567 * 引数ã¯ã€æ•°å—以外ã?æ–?—を削除ã—ãŸçŠ¶æ…‹ã«å¤‰æ›å¾Œã?処ç?«å›žã—ã¾ã™ã?
568 * ä¸è¦ãªæ–?—を削除ã—ãŸçŠ¶æ…‹ã§ã€?¼˜æ–‡å—以上ã«ãªã‚‹ã‚ˆã?«æŒ?®šã—ã¦ãã ã•ã„ã€?
569 * 例外的ã«ã€?¼–æ–‡å—ã?å ´åˆã?ã€yyyyMM01 ã¨ã¿ãªã—ã¦ã€?01" æ–?—å?を付与ã—ã¾ã™ã?
570 * 引数㫠null を指定ã™ã‚‹ã¨ã€ç¾åœ¨æ™‚刻ã®ã‚«ãƒ¬ãƒ³ãƒ?‚’è¿”ã—ã¾ã™ã?
571 * ãれ以外ã?ãƒ??ã‚¿ã§ã€?¼˜ã‚±ã‚¿ä»¥ä¸‹ã?å ´åˆã?ã€RuntimeException ãŒç™ºç”Ÿã—ã¾ã™ã?
572 * ?˜ã‚±ã‚¿ä»¥ä¸Šï¼‘4ケタ未æº??å ´åˆã?ã€?¼˜ã‚±ã‚¿åˆ?‚’ã€å¹´æœˆæ—¥ã«åˆ?›¢ã—ãŸã‚«ãƒ¬ãƒ³ãƒ?
573 * オブジェクトを作æ?ã—ã¾ã™ã??‘4ケタ以上ã§åˆã‚ã¦ã€æ™‚åˆ?§’ã‚’å«ã‚?‚«ãƒ¬ãƒ³ãƒ?
574 * を作æ?ã—ã¾ã™ã?
575 *
576 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
577 * @og.rev 5.5.8.2 (2012/11/09) value ã®åˆ¤å®šã«ã€null ã¨ ã‚¼ãƒæ–?—å?を判定ã™ã‚‹ã?
578 *
579 * @param value æ—¥ä»˜ã‘æ–?—å?
580 *
581 * @return カレンãƒ?‚ªãƒ–ジェクãƒ?引数ãŒnullã®å ´åˆã?ã€ç¾åœ¨æ™‚刻)
582 */
583 public static final Calendar getCalendar( final String value ) {
584 Calendar cal = Calendar.getInstance();
585
586 // if( value == null ) { return cal; }
587 if( value == null || value.isEmpty() ) { return cal; } // 5.5.8.2 (2012/11/09) null ã¨ ã‚¼ãƒæ–?—å?を判定ã™ã‚‹ã?
588
589 // 日付表記ã«ä¸è¦ãªæ–?—を削除ã—ã¾ã™ã?
590 String dateStr = parseNumber( value ) ;
591
592 if( dateStr.length() == 6 ) { dateStr = dateStr + "01"; } // yyyyMM01 å½¢å¼ã«ç„¡ç?‚„りåˆã‚ã›ã‚‹ã?
593 else if( dateStr.length() < 8 ) {
594 String errMsg = "日付指定パラメータã«ã€ä¸æ£ãªå€¤ãŒæŒ‡å®šã•れã¾ã—ãŸã€‚value=[" + value + "]" ;
595 throw new RuntimeException( errMsg );
596 }
597
598 cal.clear(); // 日付文å—å?ãŒå˜åœ¨ã™ã‚‹ã®ã§ã€ã‚«ãƒ¬ãƒ³ãƒ?‚’リセãƒ?ƒˆ
599
600 int year = Integer.parseInt( dateStr.substring( 0,4 ) );
601 int month = Integer.parseInt( dateStr.substring( 4,6 ) ) - 1;
602 int date = Integer.parseInt( dateStr.substring( 6,8 ) );
603
604 int hour=0, minute=0, second=0;
605 if( dateStr.length() >= 14 ) {
606 hour = Integer.parseInt( dateStr.substring( 8,10 ) );
607 minute = Integer.parseInt( dateStr.substring( 10,12 ) );
608 second = Integer.parseInt( dateStr.substring( 12,14 ) );
609 }
610
611 cal.set( year,month,date,hour,minute,second );
612
613 return cal;
614 }
615
616 /**
617 * æŒ?®šã?å¼•æ•°ã®æ—¥ä»˜ã‘æ–?—å?(yyyyMMdd)ã‚ˆã‚Šã€æ—¥ä»˜ã‚’åŠ?®—ã—ã¦è¿”ã—ã¾ã™ã?
618 * マイナスを与ãˆã‚‹ã¨ã€æ¸›ç®—ã—ã¾ã™ã?
619 * 日付以上ã?ç²¾åº¦ã®æ–?—å?を渡ã—ã¦ã‚‚ã?日付ã?ã¿ã®è¨ˆç®—ã¨ãªã‚Šã¾ã™ã?
620 * çµæžœã¯ã€å¼•æ•°ã®æ—¥ä»˜ãƒ•ォーマットã¨ã¯å…¨ã別ã§ã€yyyyMMdd ã®?˜æ–‡å—å½¢å¼ã«ãªã‚Šã¾ã™ã?
621 * 引数㫠null を渡ã™ã¨ã€å®Ÿè¡Œæ™‚ã®æ—¥ä»˜ã‚’ベã?スã¨ã—ã¦å‡¦ç?—ã¾ã™ã?
622 *
623 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
624 *
625 * @param baseDate æ—¥ä»˜ã‘æ–?—å?(yyyyMMdd)
626 * @param plus åŠ?®—ã™ã‚‹æ—¥æ•°(éŽåŽ»ã«ã™ã‚‹ã«ã¯ãƒžã‚¤ãƒŠã‚¹å€¤ã‚’指定ã™ã‚?
627 *
628 * @return çµæžœã®æ—¥ä»?yyyyMMdd)
629 */
630 public static final String getDatePlus( final String baseDate,final int plus ) {
631 Calendar cal = getCalendar( baseDate );
632 cal.add( Calendar.DATE,plus );
633
634 return getDate( cal.getTimeInMillis() , "yyyyMMdd" );
635 }
636
637 /**
638 * ç¾åœ¨ã®æœˆã«ã€æŒ‡å®šã?月数をã?ラスã—ãŸæ—¥ä»˜æ–‡å—å?ã‚’è¿”ã—ã¾ã™ã?
639 * 日付文å—å?ã®ãƒ•ォーマットã?ã€?yyyyMM" ã§ã™ã?
640 * æŒ?®šã™ã‚‹æœˆæ•°ã«ãƒžã‚¤ãƒŠã‚¹ã‚’指定ã™ã‚‹ã¨ã€æ¸›ç®—ã§ãã¾ã™ã?
641 *
642 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæ?
643 *
644 * @param baseDate æ—¥ä»˜ã‘æ–?—å?(yyyyMM)
645 * @param plus åŠ?®—ã™ã‚‹æœˆæ•°(éŽåŽ»ã«ã™ã‚‹ã«ã¯ãƒžã‚¤ãƒŠã‚¹å€¤ã‚’指定ã™ã‚?
646 *
647 * @return æŒ?®šã?月数をã?ラスã—ãŸæ—¥ä»˜æ–‡å—å?(yyyyMM)
648 */
649 public static final String getMonthPlus( final String baseDate,final int plus ) {
650 Calendar cal = getCalendar( baseDate );
651 cal.set( Calendar.DATE, 1 ); // 当月㮠1 æ—¥ã«è¨å®?
652 cal.add( Calendar.MONTH , plus );
653
654 return getDate( cal.getTimeInMillis() , "yyyyMM" );
655 }
656
657 /**
658 * æŒ?®šã?å¼•æ•°ã®æ—¥ä»˜ã‘æ–?—å?(yyyyMMddã€yyyyMMddHHmmss)ã«ã€æ—¥ä»˜ã‚’åŠ?®—ã—ã¦è¿”ã—ã¾ã™ã?
659 * マイナスを与ãˆã‚‹ã¨ã€æ¸›ç®—ã—ã¾ã™ã?
660 *
661 * æŒ?®šã™ã‚‹æ—¥ä»˜ã«ã¯ã€å˜ä½ã‚’付与ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã?
662 * å˜ä½ã?ã€yyyyMMddHHmmss å½¢å¼ã??‘æ–‡å—ã‚’æŒ?®šã—ã¾ã™ã?大æ–?—ã?å°æ–‡å—ã‚‚è˜åˆ¥ã—ã¾ã™ã?
663 * plus="5M" ã¨ã™ã‚Œã°ã€?¼•ã‹æœˆã?plus="5d" ã¨ã™ã‚Œã°ã€?¼•æ—¥ 追åŠ?—ã¾ã™ã?
664 * plus ã«å˜ä½ã‚’付ã‘ãªã??åˆã?ã€tani ã«æŒ?®šã?å˜ä½ã‚’使ã?¾ã™ã?
665 * plus ãã?ã‚‚ã?ãŒã?null ã‹ã?isEmpty ã®å ´åˆã?ã€åŠ ç®—ã?ã€? ã«ãªã‚Šã¾ã™ã?
666 *
667 * baseDate æ–?—å?を日付文å—å?ã«å¤‰æ›å¾Œã?Calendar ã§è¨ˆç®—ã—ã€çµæžœã‚’ã?format å½¢å¼ã«å¤‰æ›ã—ã¾ã™ã?
668 * 引数㫠null を渡ã™ã¨ã€å®Ÿè¡Œæ™‚ã®æ—¥ä»˜ã‚’ベã?スã¨ã—ã¦å‡¦ç?—ã¾ã™ã?
669 *
670 * @og.rev 5.6.1.0 (2013/02/01) æ–°è¦ä½œæ?
671 *
672 * @param baseDate æ—¥ä»˜ã‘æ–?—å?(yyyyMMddã€yyyyMMddHHmmss å½¢å¼ã?日付文å—å?)
673 * @param plus åŠ?®—ã™ã‚‹æ—¥æ•°(日付å˜ä½ã‚’å«ã‚??å˜ä½ã?ã€y,M,d,H,m,s ã®æ–?—ã§ã€å¤§æ–?—å°æ–‡å—ã?区別ãŒã‚りã¾ã?
674 * @param defTani 日付å˜ä½ãŒæœªæŒ?®šã?å ´åˆã?åˆæœŸå˜ä½?'y','M','d','H','m','s' ã®ã©ã‚Œã‹)
675 * @param format è¿”ã™æ—¥ä»˜æ–‡å—å?ã®ãƒ•ォーマッãƒ?yyyyMMddã€yyyyMMddHHmmss)
676 *
677 * @return çµæžœã®æ—¥ä»?yyyyMMdd)
678 * @throws NumberFormatException åŠ?®—ã™ã‚‹æ—¥æ•°ã®å˜ä½ãŒ('y','M','d','H','m','s')以外ã?å ´åˆã?
679 */
680 public static final String getDatePlus( final String baseDate,final String plus,final int defTani,final String format ) {
681
682 int addSu = 1; // åˆæœŸå€¤(plus ã?null ã‚?Empty ã®å ´åˆã?ã€?¼‹ï¼‘ã¨ãªã‚?
683 int tani = defTani;
684
685 if( plus != null && !plus.isEmpty() ) {
686 boolean flag = true; // 日付å˜ä½ã‚’æŒã£ã¦ã?‚‹ã‹ã©ã?‹ã€‚æŒã£ã¦ã?‚‹å ´åˆã?ã€true
687 char ch = plus.charAt( plus.length()-1 ); // æœ?¾Œã?ä¸?–‡å—ã‚’å–å¾?å˜ä½ã‹ã€æ•°å—本ä½?
688 switch( ch ) {
689 case 'y' : tani = Calendar.YEAR; break ;
690 case 'M' : tani = Calendar.MONTH; break ;
691 case 'd' : tani = Calendar.DATE; break ;
692 case 'H' : tani = Calendar.HOUR_OF_DAY; break ;
693 case 'm' : tani = Calendar.MINUTE; break ;
694 case 's' : tani = Calendar.SECOND; break ;
695 default : flag = false; break ; // 日付å˜ä½ã‚’æŒã£ã¦ã?ªã??
696 }
697 if( flag ) {
698 addSu = Integer.parseInt( plus.substring( 0,plus.length()-1 ) ); // 日付å˜ä½?ã‚り
699 }
700 else {
701 addSu = Integer.parseInt( plus ) ; // 日付å˜ä½?ãªã?
702 }
703 }
704
705 Calendar cal = getCalendar( baseDate );
706 cal.add( tani,addSu );
707
708 return getDate( cal.getTimeInMillis() , format );
709 }
710 }