C#では日付を管理する為のDateTime構造体があります。
ここでは文字列からDateTimeへ変換する方法について解説します。
DateTime.Parseメソッド
DateTime.Parseメソッドは、1番目の引数で指定した文字列をDateTimeへ変換します。
変換できないような文字列が渡された場合は例外が発生します。
try
{
DateTime dt1 = DateTime.Parse("2020/1/23 13:20:10");
DateTime dt2 = DateTime.Parse("2020/1/23"); //時間が省略された時は0:00:00で変換
DateTime dt3 = DateTime.Parse("13:20:10"); //日付が省略された時は現在の日で変換
DateTime dt4 = DateTime.Parse("令和2年1月23日"); //和暦でもOK
}
catch (ArgumentNullException e)
{
//引数がnullの場合はココに来る
}
catch (FormatException e)
{
//引数が変換できない場合はココに来る
}
DateTime.TryParseメソッド
DateTime.TryParseメソッドは、1番目の引数で指定した文字列をDateTimeへ変換し、変換結果を参照渡しした引数で受け取ります。
戻り値には変換できたかどうかを bool型の値で受け取る事が出来ます。
DateTime dt;
if (DateTime.TryParse("2020/1/1 13:20:10", out dt))
{
//引数が変換できた場合はココに来る
Console.WriteLine(dt);
}
else
{
//引数が変換できない場合はココに来る
}
タイムゾーン
DateTimeには時刻の種類を表す Kind プロパティがあります。
Kindプロパティの値は以下の3種類です。
- Unspecified ・・・ 現地時刻でも世界協定時刻(UTC)でもない
- Local ・・・ 現地時刻であることを表す
- Utc ・・・ 世界協定時刻(UTC)であることを表す
普通に変換した場合(第2,3引数を省略した場合)
普通に変換した場合 Kind プロパティには Unspecofied が設定されます。
但し、変換する文字列にタイムゾーンを表す文字が含まれる場合は Local になります。
var dt1 = DateTime.Parse("2020/01/23 10:00:00"); // Unspecofied の 2020/1/23 10:00:00
var dt2 = DateTime.Parse("2020-01-23T10:00+3:00"); // Local(日本) の 2020/1/23 16:00:00
※LocalはOSのタイムゾーンを基準にした時刻
※2行目の"2020-01-23T10:00+3:00"はUTCの"07:00"になる
※OSのタイムゾーンが日本の場合"16:00"になる(日本は+9:00)
現地時間で管理したい場合
第3引数に「System.Globalization.DateTimeStyles.AssumeLocal」を指定すると Kind プロパティを Local にした値にする事が出来ます。
var style = DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeLocal;
var dt1 = DateTime.Parse("2020/01/23 10:00:00", null, style); // Local(日本) の 2020/1/23 10:00:00
var dt2 = DateTime.Parse("2020-01-23T10:00+3:00", null, style); // Local(日本) の 2020/1/23 16:00:00
世界協定時刻(UTC)で管理したい場合
第3引数に
「System.Globalization.DateTimeStyles.AdjustToUniversal」と
「System.Globalization.DateTimeStyles.AssumeUniversal」を
指定すると Kind プロパティを Utc にした値にする事が出来ます。
var style = DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal;
var dt1 = DateTime.Parse("2020/01/23 10:00:00", null, style); // Utc の 2020/1/23 10:00:00
var dt2 = DateTime.Parse("2020-01-23T10:00+3:00", null, style); // Utc の 2020/1/23 07:00:00

コメント
コメントを投稿