知ってればそれだけなのですが、System.DateTime
とSystem.TimeSpan
では指定できる書式文字列が異なります。知らずによくわからないエラーを出して一瞬困りました。
たとえば、DateTimeオブジェクトで時間のところで HH:mm:ss
という形式で出力したい場合は次のようにカスタム書式文字列を指定できます。
DateTime.Now.ToString("HH:mm:ss")
が、TimeSpanオブジェクトは同じように指定するとエラーになります。
DateTime.Now.TimeOfDay.ToString("HH:mm:ss")
標準のTimeSpan書式文字列のc
を指定するか、カスタム書式文字列の場合は時間は小文字のh
を使ったうえで:
を\
でエスケープする必要があります*1。
DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss") DateTime.Now.TimeOfDay.ToString("c")
なんでこんな使い方をする必要があったかというと、MySQLでDate型のカラムをDateTime
型にマッピングして、Time型のカラムをTimeSpan
型にマッピングしていたためでした。ドキュメントはこちらにあるのでカルチャーによる違いなど詳細はこちらを参考にしてください。
*1:なお標準書式文字列cは1日以上の場合の日付部分と小数点以下の秒も出力されるという違いがあります