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 }