RFC 1123 (RFC 822)による日付・時刻表記形式を紹介します。
または
RFC 1123ではUTC時間で表現されます。
C#での実装例を紹介します。
下図のUIを作成します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
namespace TimeZoneDemo
{
public partial class FormRfc1123 : Form
{
public FormRfc1123()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
DateTime dt = DateTime.Now;
DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
textBox1.Text = dt.ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'", dtfi);
//別のロジック
//DateTimeOffset dtOffset = new DateTimeOffset(dt, TimeZoneInfo.Local.GetUtcOffset(dt));
//textBox1.Text = dtOffset.ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'", dtfi);
}
private void button2_Click(object sender, EventArgs e)
{
DateTime dt = DateTime.Now;
textBox1.Text = dt.ToUniversalTime().ToString("r");
}
}
}
RFC 1123はUTC(GMT)時間での表記のためToUniversalTime()メソッドを呼び出しローカル時間をUTCに変換します。変換後ToString()メソッドでRFC 1123形式に整形して文字列を表示します。カスタム書式を用いて"ddd, dd MMM yyyy HH:mm:ss 'GMT'"と記述しても良いですが、RFC 1123形式の場合は標準の書式指定文字列"r"を用いても出力できます。
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックするとRFC1123形式で現在の時刻を表示します。
[button2]をクリックしても同じ動作になります。
private void button1_Click(object sender, EventArgs e)
{
DateTime dt = DateTime.Now;
textBox1.Text = dt.ToUniversalTime().ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'";
}
実装したコードにはDateTimeのToString()メソッドの第二引数にDateTimeFormatInfoを与えていますが、上記コードのように、ToString()メソッドの第二引数を与えない場合、表示結果は下図の画面となります。曜日の名称が日本語で表示されていることが確認できます。RFC 1123では曜日名は英語名で表記するため、先のコードのようにToString()メソッドにはDateTimeFormatInfoを指定します。