時刻の書式について DateTime.ToShortTimeString はハマる可能性有り!

ネタ元:時間区切り指定


.NET で何でこうなるか調べてみた。
カスタムの日付と時刻の書式指定文字列
をみると、":" はカスタム書式指定子扱いで、DateTimeFormatInfo.TimeSeparator プロパティ (System.Globalization) の値が使用されると書かれています。
確実に":"を表示する場合は、"\"でエスケープすればよいようです。
短い時刻の形式を変更してみました。

ここから、既定のカルチャの Timeseparator は長い時刻の形式を使っているのかなと思われます。
続いて、

"yyyy/MM/dd HH:mm:ss" で指定した物の時刻が "HH時mm時ss" と表示されていますが、これは Timeseparator が 時/分/秒 関係無く一つの値しか持っていないせいでしょう。
それより気になるのが、ToShortTimeString の結果です。なんか怪しいですね。現在のカルチャの Timeseparator と ShortTimePattern を表示してみました。

ShortTimePattern が H:mm になっていて、Timeseparator が "時" なので、ToShortTimeString の結果が、"H時mm" なんですね!
これはハマるなぁ。ToShortTimeString の結果を "H:mm" としたいなら、短い時刻の形式を次の様に変更します。

おまけ
":" をエスケープした場合は、Timeseparator の影響を受けません。