c# DateTime string プログラミング

【C#】日付時刻DateTimeを文字列に変換|日付文字列をDateTimeオブジェクトに変換する方法

日付や時刻はDateTimeを使用して扱うことができます。

このDateTimeに関して、以下の2点を紹介していきます。

  • 文字列に変換する
  • 文字列からDateTimeに変換する

文字列に変換の場合は、書式指定子によって色んな表示の仕方ができます。参考にしてみてください。


日付・時刻(DateTime)を文字列に変換する|DateTimeのプロパティを使用

例えば、以下のようにDateTimeのプロパティを使ってどんな文字列に変換できるか、デバッグ出力しながら確認してみましょう。

動作確認結果は以下の通りです。

DateTime.Now.ToString()
→ 2019/07/10 8:40:12

DateTime.Now.ToLongDateString()
→ 2019年7月10日

DateTime.Now.ToLongTimeString
→ 8:40:12

DateTime.Now.ToShortDateString
→ 2019/07/10

そのままToStringで出力してみると、年月日時分秒で出力されるのがわかります。

この時の表示は「/(スラッシュ)」で区切られているのがわかります。

また、次のToLongDateStringで出力してみると、今度は年月日が出力されます。Dateなので日付部分のみが出力されてます。

この時の表示は、先ほどとは異なり、漢字で「年月日」と区切られています。

 

というように、DateTimeのプロパティを使用すると、決まった形式で文字列に変換できるのがわかりました。

でも、実際の場面では、

  • 2019年を2桁表示の19年で出力したい
  • 2019.07.10 と「ドット(.)」で区切って表示したい
  • 2019-07-10 と「ハイフン(-)」で区切って表示したい

など、いろんな場面で出力したい形式が変わってくると思います。

次項では、そんな自由な形式で日付・時間を文字列に出力する方法を紹介します。

色んな形式で日付・時刻(DateTime)を文字列に変換する|yyyymmdd

string.Formatで書式指定子を使って、文字列に変換します。

DateTimeの書式指定子は少し数が多いですが、暗記する必要はありません。

とても便利なので、こんな事ができるんだー、と頭に入れておけばOKです。わからなくなったらもう一度このページを参照しにきてください!

とりあえず1つサンプルコードを載せてみます。

この時の出力は、以下の通りです。

2019/07/10 19:56:54

yyyyは年、MMは月、ddは日にち、HH mm ssで時分秒を出力する、といった感じです。

もう少し、いくつかサンプルを載せておきます。

この時の出力は以下のような感じです。

t = string.Format("{0:yyyy-MM-dd HH:mm:ss}", timeNow);
→ 2019-07-10 19:56:54

t = string.Format("{0:yy/MM/dd(ddd) HH:mm:ss}", timeNow);
→ 19/07/10(水) 19:56:54

t = string.Format("{0:yy/MM/dd(dddd) HH:mm:ss}", timeNow);
→ 19/07/10(水曜日) 19:56:54

t = string.Format("{0:y.M.dd(dddd) hh:mm:ss.fff}", timeNow);
→ 19.7.10(水曜日) 07:56:54.340

yyyy MMの間を「ハイフン」や「ドット」で区切ることも可能です。

またyyyyyyとすると2桁で年(2019 → 19)を表示することも可能です(Mとかdも同じです)。

dddddddで曜日を出力することも可能です。fffでミリ秒を出力することも可能です。

とても便利ですね!

参考までに、よく使いそうな書式指定子を表で掲載しておきます。

書式指定子説明使用例
y0~99で表示19
yy00~99で表示19
yyyy0000~9999で表示2019
M1~12で表示7
MM01~12で表示07
d1~31で表示9
dd01~31で表示09
ddd曜日の省略名で表示
dddd曜日の完全名で表示火曜日
h1~12で表示7
hh01~12で表示07
H0~23で表示13
HH00~23で表示07
m0~59で表示5
mm00~59で表示05
s0~59で表示7
ss00~59で表示07
fミリ秒0~9で表示1
ff00~99で表示12
fff000~999で表示123

表がみにくい場合は、同じものを画像にしましたのでこちらを参照してみてください。

日付・時間文字列をDateTimeオブジェクトに変換する方法|DateTime.Parse、DateTime.ParseExact

DateTimeを文字列に変換する方法は分かったと思います。

今度はその逆、文字列をDateTimeオブジェクトに変換する方法を紹介します。

DateTime.ParseDateTime.ParseExactを使用します。

ソースコードは以下の通り。

ここでは、2019年7月9日12時00分12秒という文字列「2019_07_09_120012」をDateTimeオブジェクトに変換しています。

※アンダーバーで区切っている。

この時のDebug文の出力は以下の通り。

2019/07/09 12:00:12

ちゃんと変換されているのがわかります。

ここで注意なのですが、変換元の日付時間文字列と、変換したいフォーマットの形式があっていないと例外が発生する、という点。

ここでは、アンダーバーとハイフンでわざと形式を違うようにしてみました。

DateTimeへの変換ができずに、FormatExceptionという例外が発生しています。

こんな時は、TryParseExactを使用するとよいです。

使い方は以下。

TryParseExactの戻り値がbool型になっていて、変換できる場合はtrue、できない場合はfalseが返る仕様となっています。

そのため、変換できなくても例外が発生することなく処理できます。

基本的にはこのTryParseExactを使用するのが安全だと思います。

※ちなみに、2019/07/09 12:00:12のように通常形式の場合はTryParseやParseを使用してもDateTimeオブジェクトに変換することができます。

まとめ

  • 日付・時間のDateTimeを文字列に変換するには書式指定子を使う!
  • 文字列をDateTimeに変換するには、TryParseEactを使う!

\この記事はどうでしたか?/

-c#, DateTime, string, プログラミング

© 2021 ジョブログLiFE