日付のフォーマットを整える
日付 | 2017/09/28 |
---|---|
ID | 17-003 |
バージョン | v15以降 |
プラットフォーム | Win, Mac |
インターネットにアクセスして得られた日付が、どうも扱いにくいと思うことがあるかもしれません。例えば、相手先サーバから返された文字列が次のような時です。
Wed Sep 27 2017 12:03:56 GMT+0900
この文字列を4DのDATEコマンドに渡しても日付として評価されません。 そこで、こうしたフォーマットをよく扱う他の言語に頼り、4Dで扱いやすい文字列に変換することが求められます。
真っ先に思いつくのは、PHPです。PHP Executeコマンドで評価させれば、PHPのライブラリで簡単に評価できます。 しかしPHP Executeコマンド以外の方法、言い換えるならPHP以外の言語に処理させることも可能です。
後述の例題は、それぞれのプラットフォームに合わせたjsファイルを用意して、メソッドから実行するコード例です。このコードでは、jsファイルをResourcesフォルダ内のJavaScriptsフォルダに配置することを想定しています。
これを実行して、冒頭の日付文字列から得られる結果は…
- Windowsの場合: 2017年9月27日 12:03:56
- macOSの場合: 2017/9/27 12:03:56
注:結果はマシン環境で差があることがあります
このように整形されれば、4Dのプログラムで扱うのは容易いでしょう。
余談ですが、冒頭のフォーマットの日付文字列以外でも、日付と認識されれば変換可能ですから、色々と試してみてください。
JavaScriptファイル
Windows用(ファイル名:date_fomat_normalization_win.js)
// standard stream var stdin = WScript.StdIn; var stdout = WScript.StdOut; var str = stdin.ReadLine(); var dateObj = new Date(str); stdout.WriteLine(dateObj.toLocaleString());
macOS用(ファイル名:date_fomat_normalization_mac.js)
// standard stream var global = this,stdin; var str = global.readline(); var dateObj = new Date(str); print(dateObj.toLocaleString());
4Dメソッド
//JavaScriptで日付フォーマットの変換をする // $1; 整形前の日付文字列 // $0; 整形後の日付文字列 C_TEXT($0) C_TEXT($1) C_LONGINT($pos;$len) C_TEXT($input;$output;$error) $input:=Choose($1="";"Dummy";$1) //空白を避ける $path:=Get 4D folder(Current resources folder)+"JavaScripts"+Folder separator If (Folder separator=":") //Macか? //Mac用 $path:=Convert path system to POSIX($path+"date_fomat_normalization_mac.js") LAUNCH EXTERNAL PROCESS("/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc \""+$path+"\"";$input;$output;$error) //注:後述の追記を参照のこと Else //Windows用 $path:=$path+"date_fomat_normalization_win.js" SET ENVIRONMENT VARIABLE("_4D_OPTION_HIDE_CONSOLE";"true") LAUNCH EXTERNAL PROCESS("cscript \""+$path+"\"";$input;$output;$error) //Windowsの場合、後処理が必要 If (Match regex("[0-9]{4}.*";$output;1;$pos;$len)) $output:=Substring($output;$pos;$len) Else $output:="Invalid Date" End if End if $0:=$output
macOS 10.15.4(Catalina)に関する追記
macOS Catalina の 10.15.4 のアップグレード後に、jsc のパスが変更されているのを確認しました。10.15.4 での jsc は、下記のパスになります。
/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc
前述のコードの当該箇所をOSのバージョンに合わせて修正してください。