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


110

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


出力の作成にどの言語を使用していますか?
PeterPerháč2009

回答:


103

2番目の精度については、yyyy-MM-dd HH:mm:ssが適切です。

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


ええ、私はあなたとフレドリクに同意します。それらの参照を掘り下げることができれば、私は確かに感謝します。ありがとう!

18
Rubyを使用しているstrftime場合、同等の引数文字列は"%Y-%m-%d %H:%M:%S"
グレッグマシュークロスリー

2
@nickf- .CSVは単なるテキストファイルです。タイムゾーンなど、ファイルに書き込むものはすべてカンマ区切りのプレーンテキストとして表示できます。重要なのは、どのアプリケーションがそれを読み取るか、そしてそのアプリケーションがテキストをどのように期待するかです。 米国議会図書館のCSV標準のドキュメント以下に示します。日付を明確に保存するための規定された方法はありません。また、RFC-4180およびCSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm)。
ashleedawg 2018

C#/ IronPython File.GetLastWriteTimeUtc( "your-path-here")。ToString( "yyyy-%m-%d%H:%MM:%ss")
Konrads

Pythonでstrftime()を使用すると、形式も"%Y-%m-%d %H:%M:%S"Rubyと同じになります。
rcronk

18

「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」。


14

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


2
奇妙なことに、Excel 2010は、ミリ秒の部分が000の場合、日付を検出しません。他の検出は可能です。
ディオF

4

あなたが使用した場合 doubleデータ型、Excelでの再計算。


私は試してみましたが、本当にうまくいきました。その特定の列の形式は日付/時刻であることをExcellに伝える必要があります。データを明らかに記述していないため、CSVからこれを自動的に検出しません
PeterPerháč2009

3

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

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


1

タイムゾーンも。Excel / OpenOfficeの数式が最終的に日時をローカライズできるように、UTCオフセットをUTCからの秒数として保存する必要があります。これは、前に0がある数字を格納するよりも簡単であることがわかりました。-0900はどのスプレッドシートシステムでもうまく解析できなかったため、インポートを実行するようにトレーニングすることはほぼ不可能でした。


1

「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ファイルから)が渡されると、切り捨てではなく丸めが実行されます。

マイクロ秒の精度が重要な場合を除いて、これは問題ないかもしれません。その場合は、自動データ型認識をトリガーせず、文字列を文字列として保持するほうがよいでしょう...


0

私はそれを推測ISO-形式は良いアイデアです。(ウィキペディアの記事、時間情報も含む)


1
(反対票;実際には、いいえ、Excelはその形式を認識しません)
Doug

1
@Dougテストを実行して確認しました。Office2010の英語版で正常に動作し、両方のローカル設定(スウェーデン語、たまたま日付にISO形式を使用しています)で試してみました。興味なし:どの環境で失敗しましたか?Excelが一部の
環境

1
それは間違いなくOSXのOffice 2012では動作しません。私のテストでExcelが認識できる唯一の「ネイティブ」形式はMM / DD / YYYY HH:MM:SSでした。他のすべては単にテキストとして扱われました。
Doug

1
ExcelがCSVのISO形式の日付を認識しないことがわかったため、この質問を見つけました。IMO、それはExcelのバグです。
billpg 2014年

2
@Patrickかもしれません。2009年にテストするのは少し大変でした;-)
FredrikMörk16年

0

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

したがって、奇妙なことに、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"(時間のみw /秒)


-1

次の形式の日時列を含むcsvファイルがあるとします:yyyy-mm-dd hh:mm:ss

Excelは次の形式で表示します:dd / mm / yyyy hh:mm

例:2020-05-22 16:40:55は22/05/2020 16:40と表示されます

これは明らかに、Windowsで選択された短い日付と短い時間の形式によって決定されます。たとえば、Windowsの短い日付形式をyyyy-mm-ddに変更すると、Excelに2020-05-22 16:40と表示されます。

厄介なことに、Excelで秒を自動的に表示する方法を見つけることができません(Excelで列を手動でフォーマットする必要があります)。ただし、csvファイルにhh:mm:ss形式(16:40:55など)の時間列が含まれている場合、Excelに表示されるのは秒も含まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.