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
関連記事
- C#の値型と参照型の違い
- C#のコンストラクタでオーバーロード
- C#のコンストラクタの継承
- C#のジェネリックを使おう
- C#のデリゲート (delegate) って何?
- C#のデリゲートお手軽にする匿名メソッド
- C#のラムダ式【=>】って何?
- C#で基底クラスのメソッドを置き換えるオーバーライド
- C#でキャストとas演算子を使いこなす
- C#で型を判別するtypeofとis演算子
- C#の値型でもnullを扱えるようにするNullable
- C#のリソース解放にはIDisposableとusingを使おう
- C#のStringとstring、Int32とint 違いは・・・ない!
- C#でasync/awaitを使った非同期処理
- C#で文字列を指定の区切り文字で分割
- C#のstring.Formatで桁数や書式を指定する
- C#の配列やListをソートする
- C#の配列やListを検索する (Find,FindAll,FindIndex)
- C#の配列やListを高速に検索する (BinarySearch)
- C#の配列の中に指定の要素が存在するかを調べる(LINQ Contains)
- C#の配列の中に条件を満たす要素が存在するかを調べる(LINQ Any)
- C#の配列から条件に合う要素を抽出する(LINQ Where)
- C#の配列で要素毎の処理結果を得る(LINQ Select)
- C#の配列を並び替える(LINQ OrderBy,ThenBy)
- C#の配列をグループ毎に処理する(LINQ GroupBy)
- C#の配列を内部結合(INNER JOIN)する(LINQ Join)
- C#の配列から最初の要素を取り出す(LINQ First,FirstOrDefault)
- C#の配列の重複要素を削除する(LINQ Distinct)
- C#でフォルダ内のファイル名一覧を取得する
- C#でテキストファイルを読み込む
- C#でテキストファイルに書き込む
- C#でバイナリファイルを読み込む
- C#でバイナリファイルに書き込む
コメントをお書きください