C#のDateTime.TryParseExactとは?C#のDateTime.TryParseExactを使って文字列をDateTime変換する方法
- システム
エンジニア - C#のDateTime.TryParseExactとはなんですか?
- プロジェクト
マネージャー - DateTime.TryParseExactでは、様々なフォーマットの日付文字列をエラーなく変換できます。使い方を見ていきましょう。
C#のDateTime.TryParseExactとは?
今回は、C#のDateTimeクラスのTryParseExactメソッドについて説明します。
C#では独自のフォーマットで定義したstring型の日付を、DateTimeに変換できるか検証する時に、DateTimeクラスのTryParseExactメソッドが使えます。DateTime.TryParseExactメソッドを使いこなせば様々なフォーマットの日付文字列を、例外エラーを起こすことなく変換できます。
C#のDateTime.TryParseExactメソッドを用いたDateTime変換に興味のある方はぜひご覧ください。
C#のDateTime.TryParseExactを使って文字列をDateTime変換する方法
C#ではDateTimeクラスのTryParseExactメソッドに似た、同じくDateTimeクラスのTryParseメソッドが存在します。日付文字列をDateTimeへと変換可能か検証し、可能であれば変換するという役割はTryParseExactメソッドと同様ですが、TryParseExactメソッドでは独自に指定されたフォーマットの日付文字列を変換できる点がTryParseメソッドと異なります。
DateTimeクラスとは、C#において日付を扱う時に用いるクラスのことです。DateTimeを使えば年月日の取得や日付の比較など、日付に関する様々な処理ができるので、DateTimeに変換することはプログラムで日付を扱ううえで便利です。
日付文字列から日付に関する処理をC#で行う場合は、DateTime.TryParseメソッドやDateTime.TryParseExactメソッドを使ってDateTimeへと変換しましょう。
それではDateTime.TryParseメソッドとDateTime.TryParseExactメソッドの使い方について説明します。
DateTime.TryParseメソッド
C#のDateTime.TryParseメソッドは、string型の日付をDateTimeに変換する時に使います。
1
2
3
|
DateTime.TryParse(dateString, provider, styles, out date)
|
第1引数はstring型で、第4引数はDateTime型です。第1引数に日付文字列をセットし、メソッドを実行することで、DateTimeに変換された値が第4引数にセットされます。
第2引数はCultureInfo型で、カルチャーを表します。通常は日本語環境で実行されるため、CultureInfo.CurrentCultureの指定で支障ありませんが、例えば取得結果を英語表記にする場合はCultureInfo(“en-US”)にするなど、言語に応じて使い分けましょう。
第3引数はDateTimeStyles型で、文字列解析をカスタマイズする形式指定オプションを定義します。通常はDateTimeStyles.Noneで構いません。ただし第1引数に渡す日付文字列に空白を含む場合はAllowLeadingWhite、AllowTrailingWhiteなど、必要に応じて指定しましょう。
メソッドの戻り値はbool型で、第1引数がDateTimeに変換できたらTrueが、変換に失敗したらFalseが返されます。
以下、日付文字列をDateTimeに変換するサンプルプログラムのソースコードです。プログラムの先頭に
1
2
3
4
|
using System;
using System.Globalization;
|
を記述してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
static void Main() {
string dateString = "2021/05/01 15:30:10";
CultureInfo ci = CultureInfo.CurrentCulture;
DateTimeStyles dts = DateTimeStyles.None;
DateTime date;
if (DateTime.TryParse(dateString, ci, dts, out date)) {
// 結果をコンソールに出力
Console.WriteLine(date);
} else {
Console.WriteLine("変換に失敗しました");
}
}
|
実行結果は次のように出力されます。
2021/05/01 15:30:10
string型のDateTime変換はDateTime.Parseメソッドでも可能ですが、変換に失敗すると例外エラーになります。例外エラーを回避したい場合はDateTime.TryParseメソッドを使いましょう。
試しに上記サンプルプログラムにて、変数のdateStringに”2021/05/32 15:30:10″をセットしてプログラムを実行すると、TryParseメソッドでFalseが返され、「変換に失敗しました」とコンソール出力されます。
DateTime.TryParseExactメソッド
以上、C#のDateTime.TryParseメソッドについて説明しました。続いて、TryParseメソッドの拡張版であるDateTime.TryParseExactメソッドについて説明します。
DateTimeに変換する日付文字列が独自で定義されているフォーマットの場合、TryParseExactメソッドを使うことが可能です。
1
2
3
|
DateTime.TryParseExact(dateString, format, provider, styles, out date)
|
第1引数、第3~5引数は、TryParseメソッドで説明した内容と同じです。第2引数のformatはstring型で、ユーザーが任意に指定した日付のフォーマットを設定します。
以下、任意フォーマットの日付文字列をDateTimeに変換するサンプルプログラムのソースコードです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
static void Main() {
string dateString = "2021-05-01 15:30:10";
string format = "yyyy-MM-dd HH:mm:ss";
CultureInfo ci = CultureInfo.CurrentCulture;
DateTimeStyles dts = DateTimeStyles.None;
DateTime date;
// yyyy-MM-dd HH:mm:ss形式を変換
if (DateTime.TryParseExact(dateString, format, ci, dts, out date)) {
// 結果をコンソールに出力
Console.WriteLine(date);
} else {
Console.WriteLine("変換に失敗しました");
}
}
|
実行結果は次のように出力されます。
2021-05-01 15:30:10
また、上記以外のフォーマットで変換する場合は、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
static void Main() {
DateTime date;
CultureInfo ci = CultureInfo.CurrentCulture;
DateTimeStyles dts = DateTimeStyles.None;
// yyyy年MM月dd日 HH時mm分ss秒 形式
string dateString = "2021年05月01日 15時30分10秒";
string format = "yyyy年MM月dd日 HH時mm分ss秒";
if (DateTime.TryParseExact(dateString, format, ci, dts, out date))
Console.WriteLine(date);
// yy/MM/dd HH:mm:ss 形式
dateString = "21/05/01 15:30:10";
format = "yy/MM/dd HH:mm:ss";
if (DateTime.TryParseExact(dateString, format, ci, dts, out date))
Console.WriteLine(date);
// yyMMddHHmmss 形式
dateString = "210501153010";
format = "yyMMddHHmmss";
if (DateTime.TryParseExact(dateString, format, ci, dts, out date))
Console.WriteLine(date);
}
|
いずれも正常に変換され、DateTime変数がコンソール出力されます。
- システム
エンジニア - DateTime.TryParseExactを使ってDateTime変換する方法が分かりました。
- プロジェクト
マネージャー - DateTime.TryParseExactについて理解を深めて、実際にコードを書いてみましょう。
C#のDateTime.TryParseExactを使って文字列をDateTime変換しよう!
いかがだったでしょうか。C#ではDateTime.TryParseExactメソッドで、任意の日付フォーマットの文字列がDateTime変換可能か検証でき、可能であればDateTime変換された値を取得できます。
DateTime.Parseメソッドとは違い、変換に失敗した場合に例外エラーが起きません。その点を考慮しながらTryParseExactメソッドと使い分けましょう。
任意の日付フォーマットの文字列をDateTime変換する場面がありましたら、ぜひこの記事を参考にしてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)