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 */ 016package org.opengion.fukurou.system; // 6.4.2.0 (2016/01/29) package変更 fukurou.util → fukurou.system 017 018// import java.io.FileInputStream; // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidFileStream 対応 019// import java.io.FileOutputStream; // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidFileStream 対応 020import java.io.BufferedInputStream; // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidFileStream 対応 021import java.io.BufferedOutputStream; // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidFileStream 対応 022import java.io.InputStream; // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidFileStream 対応 023import java.io.OutputStream; // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidFileStream 対応 024import java.nio.file.Paths; // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidFileStream 対応 025import java.nio.file.Files; // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidFileStream 対応 026 027import java.util.Date; 028import java.util.Locale; 029// import java.util.Calendar; // 7.0.1.4 (2018/11/26) 030import java.util.concurrent.ConcurrentMap; // 7.0.1.3 (2018/11/12) 031import java.util.concurrent.ConcurrentHashMap; // 7.0.1.3 (2018/11/12) 032import java.text.DateFormat; 033import java.text.SimpleDateFormat; 034 035// import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE; // 6.1.0.0 (2014/12/26) refactoring 036 037/** 038 * DateSet.java ã¯ã€å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®æ—¥ä»˜ã€æ™‚刻ã‚ーワードを実行時ã®æ—¥æ™‚ã§å¤‰æ›ã—ã¦å‡ºåŠ›ã—ã¾ã™ã€‚ 039 * 040 * 変æ›ã«ã¯ã€$(yyyy)ã®å½¢å¼ã§æŒ‡å®šã—ã€ã‚«ãƒƒã‚³ã®æ–‡å—列㯠java.text.SimpleDateFormat ã§ä½¿ç”¨ã™ã‚‹ 041 * 時刻フォーマット構文を用ã„ã¾ã™ã€‚ 042 * ã¾ãŸã€å¼•æ•°ã« keys,vals を渡ã™ã“ã¨ã§ã€$(KEY1) æ–‡å—列を VAL1 æ–‡å—列ã¨ç½®ãæ›ãˆã¾ã™ã€‚ 043 * 044 * サンプルファイル 045 * $(yyyy/MM/dd) å¹´ï¼æœˆï¼æ—¥ã‚’表ã—ã¾ã™ã€‚ 046 * $(yy) å¹´ã ã‘ã‚’ï¼’æ¡ã§è¡¨ã—ã¾ã™ã€‚ 047 * $(MM) æœˆã‚’ï¼’æ¡ (02,03ãªã©)ã§è¡¨ã—ã¾ã™ã€‚ 048 * $(dd) æ—¥ã‚’ï¼’æ¡ (02,03ãªã©)ã§è¡¨ã—ã¾ã™ã€‚ 049 * $(HH:mm:ss) 時:分:秒を表ã—ã¾ã™ã€‚ 050 * $(MMMMMMMM) 月をフルスペルã§è¡¨ã—ã¾ã™ã€‚ 051 * $(MMM) 月を3æ¡å›ºå®š(Mar,Aplãªã©)ã§è¡¨ã—ã¾ã™ã€‚ 052 * $(EEEEEEEE) 曜日をフルスペルã§è¡¨ã—ã¾ã™ã€‚ 053 * $(EEE) 曜日を3æ¡å›ºå®š(Sun,Monãªã©)ã§è¡¨ã—ã¾ã™ã€‚ 054 * 055 * // 7.0.1.3 (2018/11/12) 2019/01/01 2030/01/01 056 * $(ATIME) 通算秒数( new Date().getTime()/1000 ) ã® 10æ¡æ–‡å—列 1546268400 1893423600 057 * $(BTIME) 通算分数( new Date().getTime()/60000 ) ã® 8æ¡æ–‡å—列 25771140 31557060 058 * ※ BTIME ãŒæ¡ã‚ãµã‚Œã™ã‚‹ã®ã¯ã€2160/02/18 ã§ã™ã€‚ 059 * 060 * 時刻フォーマット構文 061 * 062 * è¨˜å· æ„味 表示 例 063 * ------ ------- ------------ ------- 064 * G å¹´å· (テã‚スト) AD 065 * y å¹´ (数値) 1996 066 * M 月 (テã‚スト & 数値) July & 07 067 * d æ—¥ (数値) 10 068 * h åˆå‰/åˆå¾Œã®æ™‚ (1~12) (数値) 12 069 * H 一日ã«ãŠã‘る時 (0~23) (数値) 0 070 * m 分 (数値) 30 071 * s 秒 (数値) 55 072 * S ミリ秒 (数値) 978 073 * E 曜日 (テã‚スト) ç«æ›œæ—¥ 074 * D å¹´ã«ãŠã‘ã‚‹æ—¥ (数値) 189 075 * F 月ã«ãŠã‘る曜日 (数値) 2 (7月ã®ç¬¬2水曜日) 076 * w å¹´ã«ãŠã‘る週 (数値) 27 077 * W 月ã«ãŠã‘る週 (数値) 2 078 * a åˆå‰/åˆå¾Œ (テã‚スト) PM 079 * k 一日ã«ãŠã‘る時 (1~24) (数値) 24 080 * K åˆå‰/åˆå¾Œã®æ™‚ (0~11) (数値) 0 081 * z 時間帯 (テã‚スト) PDT 082 * ' テã‚スト用エスケープ 083 * '' å˜ä¸€å¼•ç”¨ç¬¦ ' 084 * 085 * パターン文å—ã®ã‚«ã‚¦ãƒ³ãƒˆã«ã‚ˆã£ã¦ã€ãã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆãŒæ±ºã¾ã‚Šã¾ã™ã€‚ 086 * (テã‚スト): 4以上: フル形å¼ã‚’使用ã—ã¾ã™ã€‚4以下: çŸã„ã¾ãŸã¯çœåŠ›ã•ã‚ŒãŸå½¢å¼ãŒã‚ã‚Œã°ã€ãれを使用ã—ã¾ã™ã€‚ 087 * 088 * (数値): 最å°æ¡æ•°ã€‚ã“れよりçŸã„数値ã¯ã€ã“ã®æ¡æ•°ã¾ã§ã‚¼ãƒãŒè¿½åŠ ã•ã‚Œã¾ã™ã€‚å¹´ã«ã¯ç‰¹åˆ¥ãªå‡¦ç†ãŒã‚ã‚Šã¾ã™ã€‚ 089 * ã¤ã¾ã‚Šã€'y'ã®ã‚«ã‚¦ãƒ³ãƒˆãŒ2ãªã‚‰ã€å¹´ã¯2æ¡ã«çŸç¸®ã•ã‚Œã¾ã™ã€‚ 090 * 091 * (テã‚スト & 数値): 3以上ãªã‚‰ãƒ†ã‚ストをã€ãれ以外ãªã‚‰æ•°å€¤ã‚’使用ã—ã¾ã™ã€‚ 092 * 093 * パターンã®æ–‡å—ãŒ['a'..'z']ã¨['A'..'Z']ã®ç¯„囲ã«ãªã‘ã‚Œã°ã€ãã®æ–‡å—ã¯å¼•ç”¨ãƒ†ã‚ストã¨ã—ã¦æ‰±ã‚ã‚Œã¾ã™ã€‚ 094 * ãŸã¨ãˆã°ã€':'ã€'.'ã€' 'ã€'#'ã€'@'ãªã©ã®æ–‡å—ã¯ã€å˜ä¸€å¼•ç”¨ç¬¦ã«å›²ã¾ã‚Œã¦ã„ãªãã¦ã‚‚〠095 * çµæžœã®æ™‚刻テã‚ストã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ 096 * 097 * 無効ãªãƒ‘ターン文å—ãŒãƒ‘ターンã«å…¥ã£ã¦ã„ã‚‹ã¨ã€ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚„解æžã§ä¾‹å¤–ãŒã‚¹ãƒãƒ¼ã•ã‚Œã¾ã™ã€‚ 098 * 099 * USãƒã‚±ãƒ¼ãƒ«ã‚’使ã£ãŸä¾‹: 100 * 101 * フォーマットパターン çµæžœ 102 * -------------------- ---- 103 * "yyyy.MM.dd G 'at' hh:mm:ss z" ⇒ 1996.07.10 AD at 15:08:56 PDT 104 * "EEE, MMM d, ''yy" ⇒ Wed, July 10, '96 105 * "h:mm a" ⇒ 12:08 PM 106 * "hh 'o''''clock' a, zzzz" ⇒ 12 o'clock PM, Pacific Daylight Time 107 * "K:mm a, z" ⇒ 0:00 PM, PST 108 * "yyyyy.MMMMM.dd GGG hh:mm aaa" ⇒ 1996.July.10 AD 12:08 PM 109 * 110 * @og.rev 6.4.2.0 (2016/01/29) package変更 fukurou.util → fukurou.system 111 * @og.rev 7.0.1.3 (2018/11/12) keys,valsã‚’Mapã«å¤‰æ›´ã€‚BUILD_TYPEã®ãƒ“ルド番å·ã‚’100秒å˜ä½ã«å¤‰æ›´ã€‚ 112 * 113 * @version 0.9.0 1999/03/09 114 * @author Kazuhiko Hasegawa 115 * @since JDK1.1, 116 */ 117public class DateSet { 118 private final ConcurrentMap<String,String> prmMap = new ConcurrentHashMap<>(); // 7.0.1.3 (2018/11/12) 119 120// private String[] keys ; 121// private String[] vals ; 122 123 /** 124 * デフォルトコンストラクター 125 * 126 * Mapã®åˆæœŸå€¤ã‚’è¨å®šã—ã¦ãŠãã¾ã™ã€‚ 127 * 128 * @og.rev 7.0.1.3 (2018/11/12) KeysValsã¯ã€Mapã«ç½®ãæ›ãˆ 129 * @og.rev 7.0.1.4 (2018/11/26) ATIME,BTIME è¿½åŠ 130 */ 131 public DateSet() { 132 prmMap.put( "ATIME" , Long.toString( new Date().getTime()/1_000 ) ); // 8.5.4.2 (2024/01/12) PMD 7.0.0 UseUnderscoresInNumericLiterals 133 prmMap.put( "BTIME" , Long.toString( new Date().getTime()/60_000 ) ); // 8.5.4.2 (2024/01/12) PMD 7.0.0 UseUnderscoresInNumericLiterals 134 135 // final Calendar now = Calendar.getInstance(); 136 // final int tm = ( now.get( Calendar.HOUR_OF_DAY ) * 60 + now.get( Calendar.MINUTE ) ) / 15 ; // 0 ~ 96未満ã®æ•°å€¤ã«ãªã‚‹ 137 138 // final String CTIME = getDate( "yyDDD" ) + String.format( "%02d" , tm ) ; 139 // prmMap.put( "CTIME" , CTIME ); 140 } 141 142 /** 143 * フォーマット解æžæ™‚ã«ç½®ãæ›ãˆã‚‹ ã‚ーã¨å€¤ã®Mapã‚’è¨å®šã—ã¾ã™ã€‚ 144 * 145 * $(KEY1) æ–‡å—列を VAL1 æ–‡å—列ã¨ç½®ãæ›ãˆã‚‹å‡¦ç†ã‚’è¡Œã„ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šæ—¥ä»˜ä»¥å¤–ã® 146 * æ–‡å—列を置ãæ›ãˆã‚‹å‡¦ç†ã‚’実行ã§ãã¾ã™ã€‚ 147 * 148 * @og.rev 7.0.1.3 (2018/11/12) KeysValsã¯ã€Mapã«ç½®ãæ›ãˆ 149 * 150 * @param pMap ç½®ãæ›ãˆå…ƒã®Map 151 */ 152 public void setParamMap( final ConcurrentMap<String,String> pMap ) { 153 if( pMap != null ) { 154 prmMap.putAll( pMap ); 155 } 156 } 157 158// /** 159// * フォーマット解æžæ™‚ã«ç½®ãæ›ãˆã‚‹ ã‚ーã¨å€¤ã®é…列をè¨å®šã—ã¾ã™ã€‚ 160// * 161// * $(KEY1) æ–‡å—列を VAL1 æ–‡å—列ã¨ç½®ãæ›ãˆã‚‹å‡¦ç†ã‚’è¡Œã„ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šæ—¥ä»˜ä»¥å¤–ã® 162// * æ–‡å—列を置ãæ›ãˆã‚‹å‡¦ç†ã‚’実行ã§ãã¾ã™ã€‚ 163// * 164// * @og.rev 7.0.1.3 (2018/11/12) KeysValsã¯ã€Mapã«ç½®ãæ›ãˆ 165// * 166// * @param inkeys ç½®ãæ›ãˆå…ƒã‚ーé…列 167// * @param invals ç½®ãæ›ãˆå…ƒå€¤é…列 168// */ 169// public void setKeysVals( final String[] inkeys, final String[] invals ) { 170// if( inkeys != null && invals != null && inkeys.length == invals.length ) { 171// final int size = inkeys.length ; 172// keys = new String[size]; 173// vals = new String[size]; 174// System.arraycopy( inkeys,0,keys,0,size ); 175// System.arraycopy( invals,0,vals,0,size ); 176// } 177// } 178 179 /** 180 * ç¾åœ¨æ—¥ä»˜ã€æ™‚刻をフォーマット指定個所ã«åŸ‹ã‚è¾¼ã¿ã¾ã™ã€‚ 181 * フォーマットã®æŒ‡å®šæ–¹æ³•ã¯ã€java.text.SimpleDateFormat ã®æŒ‡å®šæ–¹æ³•ã¨åŒä¸€ã§ã™ã€‚ 182 * 183 * @og.rev 6.3.6.0 (2015/08/16) System.arraycopy ãŒä½¿ãˆã‚‹ç®‡æ‰€ã¯ã€ç½®ãæ›ãˆã¾ã™ã€‚ 184 * @og.rev 6.4.2.0 (2016/01/29) fukurou.util.StringUtil → fukurou.system.HybsConst ã«å¤‰æ›´ 185 * @og.rev 8.5.3.2 (2023/10/13) JDK21注æ„。JDK17ã¾ã§ã¯ã€Windows-31J ã ã£ãŸãŒã€JDK21ã‹ã‚‰ã€UTF-8 ã«å¤‰æ›´ã•ã‚Œã¦ã„る。 186 * 187 * @param inByte 変æ›å…ƒãƒã‚¤ãƒˆé…列(å¯å¤‰é•·å¼•æ•°) 188 * @return 変æ›å¾Œã®ãƒã‚¤ãƒˆé…列 189 */ 190 public byte[] change( final byte... inByte ) { 191 final byte[] outByte = new byte[inByte.length+100]; // 8.5.4.2 (2024/01/12) PMD 7.0.0 LocalVariableCouldBeFinal 192 int add = 0; 193 // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidReassigningLoopVariables 194// for( int i=0; i<inByte.length; i++ ) { 195// if( inByte[i] == '$' && i<inByte.length-1 && inByte[i+1] == '(' ) { 196// // 8.5.4.2 (2024/01/12) PMD 7.0.0 ShortVariable j ⇒ jj ã«å¤‰æ›´ 197// int jj = 0; 198// while( inByte[i+jj+2] != ')') { jj++; } 199// final String str = changeForm( new String( inByte,i+2,jj,HybsConst.DEFAULT_CHARSET ) ); // 6.4.2.0 (2016/01/29) 200// final byte[] byteDate = str.getBytes( HybsConst.DEFAULT_CHARSET ) ; // 6.4.2.0 (2016/01/29) 201// // 6.3.6.0 (2015/08/16) System.arraycopy ãŒä½¿ãˆã‚‹ç®‡æ‰€ã¯ã€ç½®ãæ›ãˆã¾ã™ã€‚ 202// System.arraycopy( byteDate,0,outByte,add,byteDate.length ); // 6.3.6.0 (2015/08/16) 203// add += byteDate.length ; // 6.3.6.0 (2015/08/16) 204// i += jj+2; 205// } 206// else { 207// outByte[add] = inByte[i]; 208// add++; 209// } 210// } 211 final int inLen = inByte.length; 212 int ii = 0; 213 while( ii<inLen ) { 214 if( inByte[ii] == '$' && ii<inLen-1 && inByte[ii+1] == '(' ) { 215 // 8.5.4.2 (2024/01/12) PMD 7.0.0 ShortVariable j ⇒ jj ã«å¤‰æ›´ 216 int jj = 0; 217 while( inByte[ii+jj+2] != ')') { jj++; } 218 final String str = changeForm( new String( inByte,ii+2,jj,HybsConst.DEFAULT_CHARSET ) ); // 6.4.2.0 (2016/01/29) 219 final byte[] byteDate = str.getBytes( HybsConst.DEFAULT_CHARSET ) ; // 6.4.2.0 (2016/01/29) 220 // 6.3.6.0 (2015/08/16) System.arraycopy ãŒä½¿ãˆã‚‹ç®‡æ‰€ã¯ã€ç½®ãæ›ãˆã¾ã™ã€‚ 221 System.arraycopy( byteDate,0,outByte,add,byteDate.length ); // 6.3.6.0 (2015/08/16) 222 add += byteDate.length ; // 6.3.6.0 (2015/08/16) 223 ii += jj+2; 224 } 225 else { 226 outByte[add] = inByte[ii]; 227 add++; 228 } 229 ii++ ; 230 } 231 final byte[] rtnByte = new byte[add]; 232 System.arraycopy( outByte,0,rtnByte,0,add ); 233 return rtnByte; 234 } 235 236 /** 237 * パラメータã®å¤‰æ›ã€ãŠã‚ˆã³ã€ç¾åœ¨æ—¥ä»˜ã€æ™‚刻ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆå¤‰æ›ã‚’è¡Œã„ã¾ã™ã€‚ 238 * 239 * å…ˆã«ã€ãƒ‘ラメータã®å¤‰æ›ã‚’è¡Œã„ã¾ã™ã€‚form ãŒã€Mapã®key ã«ãƒžãƒƒãƒã™ã‚Œã°ã€ 240 * ãã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚マッãƒã—ãªã‘ã‚Œã°ã€æ™‚刻ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆå¤‰æ›ã‚’è¡Œã„ã¾ã™ã€‚ 241 * フォーマットã®æŒ‡å®šæ–¹æ³•ã¯ã€java.text.SimpleDateFormat ã®æŒ‡å®šæ–¹æ³•ã¨åŒä¸€ã§ã™ã€‚ 242 * 243 * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ã‚ˆã†ã«ä¿®æ£ã—ã¾ã™ã€‚ 244 * @og.rev 6.3.9.0 (2015/11/06) コンストラクタã§åˆæœŸåŒ–ã•ã‚Œã¦ã„ãªã„フィールドを null ãƒã‚§ãƒƒã‚¯ãªã—ã§åˆ©ç”¨ã—ã¦ã„ã‚‹(findbugs) 245 * @og.rev 7.0.1.3 (2018/11/12) KeysValsã¯ã€Mapã«ç½®ãæ›ãˆ 246 * 247 * @param form フォーム文å—列 ( 例 "yyyy/MM/dd HH:mm:ss" ) 248 * 249 * @return フォーマット変æ›çµæžœ 250 */ 251 public String changeForm( final String form ) { 252 // Map#getOrDefault( key,defVal )ã¯defValも評価ãŒå¿…ãšå®Ÿè¡Œã•ã‚Œã‚‹ãŸã‚ã€ä½¿ãˆãªã„。 253 // return prmMap.getOrDefault( form,DateSet.getDate( form ) ; 254 255 final String rtn = prmMap.get( form ); 256 257// return rtn == null ? DateSet.getDate( form ) : rtn ; 258 return rtn == null ? getDate( form ) : rtn ; // 8.5.4.2 (2024/01/12) PMD 7.0.0 UnnecessaryFullyQualifiedName 259 260// // 6.3.9.0 (2015/11/06) コンストラクタã§åˆæœŸåŒ–ã•ã‚Œã¦ã„ãªã„フィールドを null ãƒã‚§ãƒƒã‚¯ãªã—ã§åˆ©ç”¨ã—ã¦ã„ã‚‹(findbugs) 261// if( keys != null && vals != null ) { 262// for( int i=0; i<keys.length; i++ ) { 263// if( form.equals( keys[i] ) ) { 264// return vals[i]; 265// } 266// } 267// } 268// 269// return DateSet.getDate( form ); 270 } 271 272 /** 273 * パラメータã®å¤‰æ›ã€ãŠã‚ˆã³ã€ç¾åœ¨æ—¥ä»˜ã€æ™‚刻ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆå¤‰æ›ã‚’è¡Œã„ã¾ã™ã€‚ 274 * 275 * å…ˆã«ã€ãƒ‘ラメータã®å¤‰æ›ã‚’è¡Œã„ã¾ã™ã€‚form ãŒã€Mapã®key ã«ãƒžãƒƒãƒã™ã‚Œã°ã€ 276 * ãã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚マッãƒã—ãªã‘ã‚Œã°ã€æ™‚刻ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆå¤‰æ›ã‚’è¡Œã„ã¾ã™ã€‚ 277 * フォーマットã®æŒ‡å®šæ–¹æ³•ã¯ã€java.text.SimpleDateFormat ã®æŒ‡å®šæ–¹æ³•ã¨åŒä¸€ã§ã™ã€‚ 278 * 279 * @param form フォーム文å—列 ( 例 "yyyy/MM/dd HH:mm:ss" ) 280 * 281 * @return フォーマット変æ›çµæžœ 282 * @og.rtnNotNull 283 */ 284 public String changeString( final String form ) { 285 final StringBuilder buf = new StringBuilder( HybsConst.BUFFER_MIDDLE ); 286 int bkst = 0; 287 int st = form.indexOf( "$(" ); 288 while( st >= 0 ) { 289 buf.append( form.substring( bkst,st ) ); 290 final int ed = form.indexOf( ')',st+2 ); // 6.0.2.5 (2014/10/31) refactoring 291 buf.append( changeForm( form.substring( st+2,ed ) ) ); 292 bkst = ed + 1; 293 st = form.indexOf( "$(",bkst ); 294 } 295 buf.append( form.substring( bkst ) ); 296 297 return buf.toString(); 298 } 299 300 /** 301 * ç¾åœ¨æ—¥ä»˜ã€æ™‚刻を指定ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã§æ–‡å—列ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã€‚ 302 * 出力フォーマットã¯ã€"yyyy/MM/dd HH:mm:ss" 固定ã§ã™ã€‚ 303 * 304 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæˆ 305 * @og.rev 6.4.2.0 (2016/01/29) fukurou.util.HybsDateUtil → fukurou.system.DateSet ã«å¤‰æ›´ 306 * 307 * @return ç¾åœ¨æ—¥ä»˜ã€æ™‚刻 ( 例 2012/09/05 18:10:24 ) 308 * @og.rtnNotNull 309 */ 310 public static String getDate() { 311 final DateFormat formatter = new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss",Locale.JAPAN ); 312 return formatter.format( new Date() ); 313 } 314 315 /** 316 * ç¾åœ¨æ™‚刻を指定ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã§æ–‡å—列ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã€‚ 317 * フォーマットã®æŒ‡å®šæ–¹æ³•ã¯ã€java.text.SimpleDateFormat ã®æŒ‡å®šæ–¹æ³•ã¨åŒä¸€ã§ã™ã€‚ 318 * 変æ›æ™‚ã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯ã€Locale.JAPAN ã§ã™ã€‚ 319 * ç¾åœ¨æ™‚刻ã¯ã€new Date() ã§æ±‚ã‚ã¾ã™ã€‚ 320 * 321 * @param form フォーム文å—列 ( 例 "yyyy/MM/dd HH:mm:ss.SSS" ) 322 * 323 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæˆ 324 * @og.rev 6.4.2.0 (2016/01/29) fukurou.util.HybsDateUtil → fukurou.system.DateSet ã«å¤‰æ›´ 325 * 326 * @return ç¾åœ¨æ—¥ä»˜ã€æ™‚刻 327 * @og.rtnNotNull 328 * @see java.text.SimpleDateFormat 329 */ 330 public static String getDate( final String form ) { 331 final DateFormat formatter = new SimpleDateFormat( form,Locale.JAPAN ); 332 return formatter.format( new Date() ); 333 } 334 335 /** 336 * 指定時刻を指定ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã§æ–‡å—列ã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã€‚ 337 * フォーマットã®æŒ‡å®šæ–¹æ³•ã¯ã€java.text.SimpleDateFormat ã®æŒ‡å®šæ–¹æ³•ã¨åŒä¸€ã§ã™ã€‚ 338 * 変æ›æ™‚ã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¯ã€Locale.JAPAN ã§ã™ã€‚ 339 * 指定時刻ã¯ã€new Date( time ) ã§æ±‚ã‚ã¾ã™ã€‚ 340 * 341 * @param time 指定ã®ã‚«ãƒ¬ãƒ³ãƒˆã‚¿ã‚¤ãƒ ã®ãƒãƒ³ã‚°å€¤ 342 * @param form フォーム文å—列 ( 例 "yyyy/MM/dd HH:mm:ss.SSS" ) 343 * 344 * @og.rev 5.5.7.2 (2012/10/09) æ–°è¦ä½œæˆ 345 * @og.rev 6.4.2.0 (2016/01/29) fukurou.util.HybsDateUtil → fukurou.system.DateSet ã«å¤‰æ›´ 346 * 347 * @return ç¾åœ¨æ—¥ä»˜ã€æ™‚刻( 例 2001/04/17 15:48:22 ) 348 * @og.rtnNotNull 349 */ 350 public static String getDate( final long time,final String form ) { 351 final DateFormat formatter = new SimpleDateFormat( form,Locale.JAPAN ); 352 return formatter.format( new Date( time ) ); 353 } 354 355 /** 356 * 入力ファイルã®æ™‚刻フォーマットを変æ›ã—ã¦å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ã¾ã™ã€‚ 357 * 358 * 引数㫠<key1> <val1> ã®ãƒšã‚¢æƒ…å ±ã‚’æ¸¡ã™ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ 359 * å…ˆã«ã€keys,vals ã®å¤‰æ›ã‚’è¡Œã„ã¾ã™ã€‚form ãŒã€keys ã«ãƒžãƒƒãƒã™ã‚Œã°ã€vals ã‚’ 360 * è¿”ã—ã¾ã™ã€‚最後ã¾ã§ãƒžãƒƒãƒã—ãªã‘ã‚Œã°ã€æ™‚刻ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆå¤‰æ›ã‚’è¡Œã„ã¾ã™ã€‚ 361 * フォーマットã®æŒ‡å®šæ–¹æ³•ã¯ã€java.text.SimpleDateFormat ã®æŒ‡å®šæ–¹æ³•ã¨åŒä¸€ã§ã™ã€‚ 362 * フォーム文å—列例 ( "yyyy/MM/dd HH:mm:ss" ) 363 * 364 * @og.rev 7.0.1.3 (2018/11/12) KeysValsã¯ã€Mapã«ç½®ãæ›ãˆ 365 * @og.rev 8.5.4.2 (2024/01/12) PMD 7.0.0 CloseResource 対応 366 * 367 * @param args 引数é…列( 入力ファイル 出力ファイル ã‚ー1 値1 ・・・ 368 * @throws Throwable ãªã‚“らã‹ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã€‚ 369 */ 370 public static void main( final String[] args ) throws Throwable { 371 if( args.length > 2 && ( args.length % 2 != 0 ) ) { 372 System.err.println( "Usage: java org.opengion.fukurou.system.DateSet <inputFile> <outputFile> [<key1> <val1> ・・・]" ); 373 return ; 374 } 375 376 final ConcurrentMap<String,String> prmMap = new ConcurrentHashMap<>(); // 7.0.1.3 (2018/11/12) 377 378 for( int i=2; i<args.length; i+=2 ) { 379 prmMap.put( args[i] , args[i+1] ); 380 } 381 382// String[] keys = new String[ (args.length-2)/2 ]; 383// String[] vals = new String[ (args.length-2)/2 ]; 384// for( int i=1; i<=keys.length; i++ ) { 385// keys[i-1] = args[i*2]; 386// vals[i-1] = args[i*2+1]; 387// } 388 389 // 8.5.4.2 (2024/01/12) PMD 7.0.0 CloseResource 対応 390// final FileInputStream filein = new FileInputStream( args[0] ); 391 byte[] byteIn = null; 392 // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidFileStream 対応 393// try ( FileInputStream filein = new FileInputStream( args[0] ) ) { 394 try ( InputStream filein = new BufferedInputStream( Files.newInputStream(Paths.get(args[0])) ) ) { 395// final byte[] byteIn = new byte[ filein.available() ]; 396 byteIn = new byte[ filein.available() ]; 397 final int len = filein.read( byteIn ); 398 if( len != byteIn.length ) { 399 final String errMsg = "èªã¿å–りファイルã®ãƒ‡ãƒ¼ã‚¿ãŒåˆ‡ã‚Šæ¨ã¦ã‚‰ã‚Œã¾ã—ãŸã€‚" + 400 "File=" + args[0] + " Length=" + len + " Input=" + byteIn.length ; 401 System.err.println( errMsg ); 402 } 403 } 404// filein.close(); 405 406 if( byteIn != null ) { 407 final DateSet dateSet = new DateSet(); 408 // dateSet.setKeysVals( keys,vals ); 409 dateSet.setParamMap( prmMap ); 410 final byte[] byteout = dateSet.change( byteIn ); 411 412 // 8.5.4.2 (2024/01/12) PMD 7.0.0 CloseResource 対応 413 // final FileOutputStream fileout = new FileOutputStream( args[1] ); 414 // fileout.write( byteout ); 415 // fileout.close(); 416 // 8.5.4.2 (2024/01/12) PMD 7.0.0 AvoidFileStream 対応 417// try ( FileOutputStream fileout = new FileOutputStream( args[1] ) ) { 418 try ( OutputStream fileout = new BufferedOutputStream( Files.newOutputStream(Paths.get(args[1])) ) ) { 419 fileout.write( byteout ); 420 } 421 } 422 } 423}