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(日本語ロカール化済み)はファイルのインポートの際に、以下の注意をすれば良いようです。
- 勘定科目を設定
- 列設定で、「日付」を設定
- 文字コード: 日本語(Shift_JIS)
- 日付の書式: 年-月-日
「日付の書式」は 「年-月-日」としているが、「年/月/日」にもうまく対応するようだ。
LibreOffice Calcによる対応
CSVファイルをダブルクリックすると、LibreOffice Calc(英語UTF-8環境)のCSV Importのダイアローグが表示される。
- Character setをJapanese(Shift-JIS)とする
- Fieldsの中の日付の列の読み込みタイプ「Standard」をクリック
- Column typeに読み込みタイプ「Standard」が表示される。
- それのPull-downから、Column typeの読み込みタイプを「Date(YMD)」にする。
読み込むと、日付の列は「文字列」ではなく「日付」として読み込まれる。
「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 |