豚吐露@wiki
DatetimeのToStringのformat指定をちゃんと理解してなかったのでmemo
最終更新:
ohden
-
view
DatetimeのToStringのformat指定をちゃんと理解してなかったのでmemo
Windows11 25H2(26200.6901)
VisualStudio 2019 Version 16.11.49
VisualStudio 2019 Version 16.11.49
format文字列がOSの設定から影響を受ける
var dt = DateTime.Now;
dt.ToString("yyyy/MM/dd HH:mm:ss");
2025/11/07 17:44:28
と、C#界隈で日付の出力形式を指定するときに良く見る書き方だが...
書いたformat指定文字列の'/'は、'/'という文字を指しているのでは無く、日付のセパレーターを表しているという事実。
書いたformat指定文字列の'/'は、'/'という文字を指しているのでは無く、日付のセパレーターを表しているという事実。
故に、上記のように指定しても、Windows側の設定から[時刻と言語]~[言語と地域]~[管理用の言語の設定]から"地域"ダイアログを開き、"形式"タブで"追加の設定"を行っていると...
指定した形式に利用しているセパレーターの文字が勝手に適用される。
指定した形式に利用しているセパレーターの文字が勝手に適用される。
例えば、日付に"yyyy-MM-dd"を指定していると、セパレーターは"-"だと勝手に判断され、
dt.ToString("yyyy/MM/dd HH:mm:ss");
2025-11-07 17:44:28
と出力されることになる。
対策
OSの設定に依存されずに出力するには、以下のように、"/"は文字列ですと明確に指定する必要がある。
dt.ToString("yyyy'/'MM'/'dd HH:mm:ss");
2025/11/07 17:44:28
昔、SQLの日付を文字列で与えてた処理に遭遇したときに、自分だけOSの設定のせいで動かんくなった事とかあったんじゃが...これが原因。
昔はシングルクォーテーションが無くても"/"に変えてくれてた気がするんじゃが...しれっと仕様変わったんじゃろうか?
こういう事するけぇ、microsoftって使い難いんよなぁ...
こういう事するけぇ、microsoftって使い難いんよなぁ...
更新日: 2025年11月10日 (月) 09時44分09秒







