web-dev-qa-db-ja.com

CSV / Excelに最適なタイムスタンプ形式は?

CSVファイルを作成しています。少なくとも秒単位で、できればミリ秒単位で正確なタイムスタンプを書き込む必要があります。 CSVファイルのタイムスタンプの最適な形式は何ですか。Excelがユーザーの介入を最小限に抑えて正確かつ明確に解析できるようにするためですか。

100
Jon

2番目の精度については、yyyy-MM-dd HH:mm:ssがトリックを行う必要があります。

Excelは、ほんの一瞬ではあまり良くない(COMオブジェクトIIRCとやり取りすると失われる)と思います。

89
Joe

「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つの可視の「レベル」(1秒の端数は独自のレベル)を提供し、7つ:年、月、日、時間、分、秒、秒の小数部。

または、タイムスタンプを人間が読めるようにする必要はないが、できるだけ正確にしたい場合は、大きな数値を保存することをお勧めします(内部的には、Excelは端数を含む日数を使用しています) 、「エポック」日付以降)。


[1]つまり、数値情報。できるだけ多くの情報を表示したいが、それを使用して計算を行うことを気にしない場合は、Excelが文字列として確実に解析する形式を作成し、そのままにしておくことができます。例えば「yyyymmdd.hhmmss.000」。

16
John Y

「yyyy-MM-dd hh:mm:ss.000」形式は、すべてのロケールで機能しません。一部(少なくともデンマーク語)の場合、「yyyy-MM-dd hh:mm:ss、000」の方が適切です。

13
user662894

doubleデータ型を使用した場合、Excelでの再計算はうまく機能すると思います。

4
Peter Perháč

[コントロールパネル]の言語設定に移動し、[フォーマットオプション]、ロケールを選択して、Windowsがデフォルトで使用する選択したロケールの実際の日付フォーマットを確認します。はい、そのタイムスタンプ形式はロケールに依存します。 ExcelはCSVを解析するときにこれらの形式を使用します。

さらに、ロケールがASCII以外の文字を使用している場合は、対応するプリUnicode Windows "ANSI"コードページでCSVを出力する必要があります。 CP1251。 ExcelはUTF-8を受け入れません。

3
John Smith

「yyyy-mm-dd hh:mm:ss.000」形式は、すべてのロケールで機能しません。一部(少なくともデンマーク語)の場合、「yyyy-mm-dd hh:mm:ss、000」の方が適切です。

user662894の回答通り。

追加したいのは、たとえばSQL Serverのdatetime2データ型からマイクロ秒を取得しようとしないことです。Excelは3秒未満(つまりミリ秒)を処理できません。

したがって、「yyyy-mm-dd hh:mm:ss.000000」は機能せず、Excelにこの種類の文字列(CSVファイルから)が入力されると、-ではなく四捨五入が実行されます。 切り捨て

マイクロ秒の精度が重要な場合を除き、これは問題ない場合があります。この場合、自動データ型認識をトリガーせずに、文字列を文字列のままにしておく方が良いでしょう...

1
Hansjp

タイムゾーンに関して。 Excel/OpenOfficeの数式が最終的に日時をローカライズできるように、UTCオフセットをUTCからの秒数として保存する必要があります。これは、その前に0がある数字を保存するよりも簡単であることがわかりました。 -0900はどのスプレッドシートシステムでも十分に解析されず、インポートすることは、人々を訓練することはほぼ不可能でした。

1
whardier

奇妙なことに、Excelはさまざまな方法でcsv日付をインポートします。 And、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」(秒のみの時間のみ)

0
Brian Rice

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;
}
0
Anoop Velluva