こんにちは。まるです。
今回も備忘録を書きます。
内容短めです。
今回のテーマは
「9時15分30秒」のような文字列をDateTime型に変換する方法
です。
まず結論から。
例:
// 文字列の用意
string timeString = "9時15分30秒";
// 変換
DateTime time = DateTime.ParseExact(timeString, "H時m分s秒", null);
上記を出力すると
2023/04/15 9:15:30
のように出力されます。
DateTime.ParseExactは以下のような公式となっております。
「DateTime.ParseExact(文字列, フォーマット, 書式情報)」
第一引数には変換したい文字列を。
第二引数には第一引数とした文字列がどのようなフォーマットであるかを。
第三引数には第一引数とした文字列が特定のカルチャーに依存する場合それを指定。
上記となります。
第三引数の書式情報は「IFormatProvider」というの正式な名称ですが、
いまいちよくわからなかったのでChatGPT先生に聞いてみました。
得られた回答は以下でした。
DateTime.ParseExactメソッドの第三引数であるIFormatProviderは、
解析する文字列が特定のカルチャに依存する場合に使用されるオプションのパラメーターです。
これは、解析する文字列の日付や時間の表現方法が、異なるカルチャで異なる場合に役立ちます。
たとえば、日付のフォーマットには、年月日の順序が異なる場合があります。
また、日付の区切り文字も、異なるカルチャで異なる場合があります。
このような場合、IFormatProviderを指定して、解析する文字列の表現方法を明示的に指定することができます。
以下は、IFormatProviderを使用して、日本のカルチャに依存する日付文字列を解析する例です。
string dateString = "2023年4月15日";
DateTime date = DateTime.ParseExact(dateString, "yyyy'年'M'月'd'日'", new CultureInfo("ja-JP"));
この例では、ParseExactメソッドの第三引数にCultureInfoオブジェクトを指定して、
日本のカルチャを表すja-JPを指定しています。
また、日付のフォーマット文字列には、年月日の順序が日本語に合わせて「年月日」になっています。
なお、IFormatProviderには、CultureInfoオブジェクトのほかにも、DateTimeFormatInfoオブジェクトなどを指定することができます。
ということでした。
第二引数でフォーマットを指定していれば、最初に例示した「null」でも問題なく変換されるので少なくともタイトルような文字列の場合には変換できるようです。
以上備忘録でした。
それではまた。