C# の Unix タイムスタンプ スニペット
現在のエポック秒、ミリ秒、DateTimeOffset による変換、ISO 8601 出力、日付文字列からのタイムスタンプ解析を行う C# の例。
Current Unix timestamp (seconds)
DateTimeOffset.UtcNow.ToUnixTimeSeconds()Current Unix timestamp (milliseconds)
DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()DateTimeOffset from Unix timestamp
DateTimeOffset.FromUnixTimeSeconds(1700000000)
DateTimeOffset.FromUnixTimeMilliseconds(1700000000000)ISO 8601 string from timestamp
DateTimeOffset.FromUnixTimeSeconds(1700000000)
.UtcDateTime
.ToString("O")Timestamp from DateTimeOffset
var dt = DateTimeOffset.Parse("2023-11-15T06:13:20Z");
dt.ToUnixTimeSeconds();
dt.ToUnixTimeMilliseconds();C# のタイムスタンプの基本
最新の C# では Unix タイムスタンプの処理に DateTimeOffset を使うべきです。DateTimeOffset.UtcNow.ToUnixTimeSeconds() は Unix 秒を返し、ToUnixTimeMilliseconds() は JavaScript 互換のミリ秒を返します。
DateTimeOffset 値の変換
エポック値を DateTimeOffset に変換するには FromUnixTimeSeconds または FromUnixTimeMilliseconds を使います。保存は UTC のままにし、ISO 8601 文字列が必要なときはラウンドトリップの O 書式で整形します。
C# の本番運用メモ
DateTimeOffset は値にオフセットを保持するため、タイムスタンプの処理では通常 DateTime より安全です。比較と永続化には UTC の時点を保存し、表示のときだけローカルタイムゾーンに変換します。連携先が秒かミリ秒かを示さずに「エポック時間」と言う場合は注意してください。
- 標準的な Unix 秒には DateTimeOffset.UtcNow.ToUnixTimeSeconds() を使う
- JavaScript 互換の値には ToUnixTimeMilliseconds() を使う
- 秒として文書化された API 値を読むときは FromUnixTimeSeconds() を使う
- ログや JSON のラウンドトリップ ISO 8601 文字列には O 書式を使う
FAQ
- タイムスタンプのコードは DateTime と DateTimeOffset のどちらを使うべきか?
- Unix タイムスタンプの作業にはオフセットの文脈を保持する DateTimeOffset を推奨します。Unix 秒・ミリ秒の直接的なヘルパーも備えています。
- O 書式は何をするのか?
- O 書式はラウンドトリップ可能な ISO 8601 値を書き出します。正確な瞬間がパースを生き延びるべきログ、JSON、テストに役立ちます。
- C# の変換を検証するには?
- DateTimeOffset.FromUnixTimeSeconds または FromUnixTimeMilliseconds で値を戻し、O で整形して、その UTC 出力を期待するタイムスタンプと比較してから値を保存します。