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 }