C#で日時をISO 8601形式に変換する方法を完全解説!初心者向けガイド
生徒
「C#で日時を国際的な形式で表示したいのですが、どんな方法がありますか?」
先生
「世界中で共通して使われる形式として、ISO 8601形式があります。」
生徒
「ISO 8601って何ですか?難しそうな名前ですね。」
先生
「大丈夫です。ISO 8601は、年・月・日・時刻を統一した書き方で表す方法です。C#なら簡単に変換できますよ!」
1. ISO 8601形式とは?初心者にわかりやすく説明
ISO 8601形式とは、世界中のシステムで同じ形式で日時を扱うための国際標準の書き方です。例えば、2025年11月27日 午後3時15分を表すときに、国によって書き方が違うと混乱が生まれます。
日本では「2025/11/27 15:15」ですが、アメリカでは「11/27/2025 3:15PM」と書きます。この違いが原因で、データ交換やシステム連携で誤動作が起きることがあります。
そこで便利なのが、世界共通の書き方であるISO 8601形式です。次のように表記します。
2025-11-27T15:15:00
「T」は日時を区切る合図で、「Z」はUTC(協定世界時)を意味します。この表記方法を理解しておくと、クラウドサービスやデータベースとのやり取りでもよく使われるので、非常に便利です。
2. C#で現在日時をISO 8601形式に変換する基本方法
C#では、DateTime型の変数に対して、ToStringメソッドを使うことで簡単にISO 8601形式へ変換できます。プログラミング初心者でもすぐに利用できます。
using System;
class Program
{
static void Main()
{
DateTime now = DateTime.Now;
string iso8601 = now.ToString("yyyy-MM-ddTHH:mm:ss");
Console.WriteLine(iso8601);
}
}
実行結果の例:
2025-11-27T15:30:00
3. 世界時刻(UTC)でISO 8601形式に変換する方法
サーバー同士の通信やAPI開発では、UTC(協定世界時)を使うことが一般的です。これは国や地域の時間差の影響を受けないためです。
DateTime utcNow = DateTime.UtcNow;
string iso8601Utc = utcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");
Console.WriteLine(iso8601Utc);
実行結果の例:
2025-11-27T06:30:00Z
4. DateTimeOffsetを使ったISO 8601形式の出力方法
C#にはDateTimeOffsetという、タイムゾーン情報(時差)を含めた日時型があります。クラウドやデータベースではこれがよく使われます。
例えば、日本の時刻を含めてISO 8601形式で出力したい場合は次のように書きます。
DateTimeOffset nowOffset = DateTimeOffset.Now;
string iso8601Offset = nowOffset.ToString("o"); // "o" はISO8601形式の書式指定子
Console.WriteLine(iso8601Offset);
実行例:
2025-11-27T15:30:00.0000000+09:00
末尾の+09:00は、日本標準時(JST)の時差を示します。世界中どこでも正確な時刻差を伝えられるため、非常に便利です。
5. ToString("o") を覚えておくと便利!即戦力の使い方
ISO 8601形式は書式を自分で組み合わせても作れますが、実はC#には簡単にこの形式を出力するための特別な書式指定子が用意されています。
ToString("o")は、ISO 8601に完全準拠した日時を出力するための特別な書き方です。これだけで、時差情報も含めた標準形式が得られます。
Console.WriteLine(DateTimeOffset.Now.ToString("o"));
6. ISO 8601形式が使われる代表的な場面
ISO 8601形式は多くのシステムで採用されています。例えば:
- REST APIでデータ通信を行うとき
- データベースに日時を保存するとき
- ログファイルに正確な時刻を記録するとき
- ExcelやCSVファイルとデータ交換するとき
- クラウドシステムと連携するとき
プログラミングを学ぶ上で、ISO 8601を扱えることは非常に重要です。初心者でも必ず理解しておくべき技術と言えます。