まさかの一発オプション… 知らなかった… (´・ω・`)
C#:
DateTime.Now.ToString("o");
PowerShell:
PS > Get-Date -Format o
出力:
2021-03-04T23:33:42.6791453+09:00
JSON と DateTime
JSON には DateTime 型がないので、DateTime 値を文字列に変換する必要がある。ここで考慮しなければならないのが、「文字列で表現した DateTime 値をちゃんと逆変換できるのか?」という点。特に、 サードパーティ製サービスとの通信を JSON で実施する場合、そのサービスがちゃんと逆変換してくれる形式である必要がある (もちろんサービスがフォーマット指定してるならそれに習うべき)。
一般論としてどんな形式がよく使われているか?と考えてみると、 ISO 8601 (ex: 2021-03-04T23:33:42.6791453+09:00
) が1つの候補として挙げられると思う。
C# で DateTime 型をこの形式の文字列に出力する場合、これまで自分はフォーマットを指定していたのだが…
DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffffffK");
色々と調べた結果、前述のように一発オプションで出力できることが判明…
背景
GCP の BigQuery でテーブルを作成する際、サンプルデータ (JSONL) を使ってスキーマ自動生成をしようとした。DateTime 型データを JSON でどのような形式にすれば BigQuery が DateTime 型として認識してくれるか?を色々と思考錯誤した結果、 ISO 8601 形式に落ち着いた。