日付フォーマット変換

Date: 2023/04/08 (initial publish), 2023/04/11 (last update)

Source: jp/note-00058.md

Previous Post Top Next Post

TOC

日付フォーマット問題

日本語で銀行等のデーターをCSVファイルで落とすと、ファイル中の日付データーは 「2023/1/31」等の形式のことがあります。一方、他のプログラムのデフォルト状態で このCSVファイルを読み込んだらうまく読み込めまないことがあります。

さらに面倒なのは、日本語ファイルは今だに「UTF-8」でなく「Shift_JIS」エンコーディングです。

GNUcashデフォルトの「Standard」では、日付列のデーター読み込みは「2023-01-31」等のISO形式が要件です。

LibreOffice Calcデフォルトの読み込みは、「2023/1/31」は文字列になります。(MS Excelでもほぼ状況は同じなのか、この問題をNETで散見します。)

以前は、文字列として読み込まれた日付データーの変換を、事後で面倒な文字列処理で変換していたのですが、よく考えたら簡単にできる道筋があったので、ここにメモにしました。

GNUcashによる対応

GNUcash(日本語ロカール化済み)はファイルのインポートの際に、以下の注意をすれば良いようです。

「日付の書式」は 「年-月-日」としているが、「年/月/日」にもうまく対応するようだ。

LibreOffice Calcによる対応

CSVファイルをダブルクリックすると、LibreOffice Calc(英語UTF-8環境)のCSV Importのダイアローグが表示される。

読み込むと、日付の列は「文字列」ではなく「日付」として読み込まれる。

「Date(YMD)」等は、「年-月-日」と「年/月/日」の両方に対応するようだ。

日付の列を選択,Format->Cells->Numbersタブ->Date->1999-12-31とすれば ISO形式の日付文字列になる。(ISO形式の日付文字列は、読み込みタイプ「Standard」 のままでも、日付としてスプレッドシート中に読み込まれる。)

この状態でCSV 形式で保存すれば、日付の文字列表現が変換されたCSVファイルとなる。

CSVファイルのencodingをJapanese(Shift-JIS)からUTF-8に変換したい場合には、 iconv等の外部ツールをCSVを使う。

当該方法は、文字列関数で複雑なスプレッドシート式を作るより簡単で汎用性がある日付の文字列表現の変換方法である。

プログラム自体に日付の文字列表現形式への対応機能が無いプログラム等への対応のツールとしても有用である。

Previous Post Top Next Post