CSV / Excelに最適なタイムスタンプ形式は?
-
03-07-2019 - |
質問
CSVファイルを作成しています。少なくとも秒単位で、できればミリ秒単位で正確なタイムスタンプを書き込む必要があります。 CSVファイルのタイムスタンプの最適な形式は何ですか?Excelがユーザーの介入を最小限に抑えて正確かつ明確に解析できるようになりますか?
解決
2番目の精度を得るには、yyyy-MM-dd HH:mm:ssが役立ちます。
Excelは、ほんの一瞬で非常に良くないと思います(COMオブジェクトIIRCとやり取りすると、Excelは失われます)。
他のヒント
" yyyy-MM-dd HH:mm:ss"を使用する以前の提案Excelはそれよりもはるかに優れた時間分解能を持っていると思いますが。 この投稿かなり信頼できる(スレッドをたどると、多くの算術演算とExcelの実験が表示されます)。それが正しければ、ミリ秒単位になります。末尾に小数点以下の桁、つまり" yyyy-mm-dd hh:mm:ss.000"を追加できます。
Excelは、その精度をすべて確認できるような方法でデータを(人間の介入なしで)必ずしもフォーマットしない場合があることに注意する必要があります。職場のコンピューターで" yyyy-mm-dd hh:mm:ss.000"でCSVを設定すると、データ(メモ帳を使用して手動で)、「mm:ss.0」を取得します。セルと" m / d / yyyy  hh:mm:ss AM / PM"数式バーで。
人間の介入なしでセルで伝えられる最大の情報[1]のために、タイムスタンプを日付部分と時間部分に分割し、時間部分を秒のみにすることができます。 Excelは、最大3つの表示可能な「レベル」を提供したいようです。 (秒の小数部が独自のレベルである)、任意のセルで、年、月、日、時間、分、秒、秒の小数部の7が必要な場合。
または、タイムスタンプを人間が読めるようにする必要はないが、できるだけ正確にしたい場合は、大きな数値を保存することをお勧めします(内部的には、Excelは日数を使用しているだけで、 「エポック」日以降の小数日を含む)。
[1]つまり、数値情報。できるだけ多くの情報を表示したいが、それを使って計算を行うことを気にしない場合、Excelが文字列として確実に解析する形式を作り、そのままにしておくことができます。例えば" yyyymmdd.hhmmss.000"。
" yyyy-MM-dd hh:mm:ss.000"形式はすべてのロケールで機能するわけではありません。一部の(少なくともデンマーク語)" yyyy-MM-dd hh:mm:ss、000"より良く機能します。
double
データ型を使用した場合、Excelでの再計算は問題なく機能すると思います。
[コントロールパネル]の言語設定に移動し、[フォーマットオプション]、ロケールを選択して、デフォルトでWindowsが使用する選択したロケールの実際の日付フォーマットを確認します。はい、そのタイムスタンプ形式はロケールに依存します。 ExcelはCSVの解析時にこれらの形式を使用します。
さらに、ロケールがASCII以外の文字を使用している場合、対応するプリユニコードウィンドウの「ANSI」でCSVを出力する必要があります。コードページ、例CP1251。 ExcelはUTF-8を受け入れません。
タイムゾーンに関して。 Excel / OpenOfficeの数式が最終的に日時をローカライズできるように、UTCからの秒としてUTCオフセットを保存する必要があります。これは、その前に0がある数字を保存するよりも簡単であることがわかりました。 -0900はどのスプレッドシートシステムでも十分に解析されず、インポートすることは人々を訓練することはほぼ不可能でした。
" yyyy-mm-dd hh:mm:ss.000"形式はすべてのロケールで機能するわけではありません。にとって 一部(少なくともデンマーク語)" yyyy-mm-dd hh:mm:ss、000"より良く機能します。
user662894の回答通り。
追加したい:たとえば、SQL Serverのdatetime2データ型からマイクロ秒を取得しようとしないでください:Excelは3秒未満(ミリ秒)を処理できません。
So" yyyy-mm-dd hh:mm:ss.000000"動作しません。Excelにこの種類の文字列(CSVファイルから)が渡されると、切り捨てではなく丸めが実行されます。
マイクロ秒の精度が重要な場合を除き、これは問題ない場合があります。この場合、自動データ型認識をトリガーせずに、文字列を文字列として保持するほうがよいでしょう...
MM / dd / yyyy hh:mm:ss形式を試してください。
XMLファイルを作成するJavaコード。
xmlResponse.append(" mydate>")。append(this.formatDate(resultSet.getTimestamp(" date")、 " MM / dd / yyyy hh:mm:ss a"))。append("");
public String formatDate(Date date, String format)
{
String dateString = "";
if(null != date)
{
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
dateString = dateFormat.format(date);
}
return dateString;
}
そのため、奇妙なことにExcelはさまざまな方法でcsv日付をインポートします。 そして、csvファイルで使用されているフォーマットに応じて、それらを異なって表示します。残念ながら、ISO 8061形式は文字列として入力されます。これにより、日付を自分で再フォーマットすることができなくなります。
日付として入力されるすべてのもの...情報全体が含まれます...しかし、形式が異なります...気に入らない場合は、Excelの列の新しい形式を選択できます働くでしょう。 (注:右揃えするので、有効な日付/時刻として入ったことを確認できます...文字列として入った場合、左揃えになります)
テストした形式は次のとおりです。
" yyyy-MM-dd" Excelで開くと、もちろん日付として表示されます。 (" MM / dd / yyyy"も動作します)
" yyyy-MM-dd HH:mm:ss"デフォルトの表示形式は" MM / dd / yyyy HH:mm"です。 (日付と時刻w / out秒)
" yyyy-MM-dd HH:mm:ss.fff"デフォルトの表示形式は「HH:mm:ss」です。 (秒のみの時間)
ISO形式が良いアイデアだと思います。 (ウィキペディアの記事、時間情報も含む)