アットウィキロゴ
豚吐露@wiki
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

豚吐露@wiki

DatetimeのToStringのformat指定をちゃんと理解してなかったのでmemo

最終更新:

ohden

- view
管理者のみ編集可

DatetimeのToStringのformat指定をちゃんと理解してなかったのでmemo

Windows11 25H2(26200.6901)
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指定文字列の'/'は、'/'という文字を指しているのでは無く、日付のセパレーターを表しているという事実。

故に、上記のように指定しても、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って使い難いんよなぁ...


更新日: 2025年11月10日 (月) 09時44分09秒

名前:
コメント:

すべてのコメントを見る
記事メニュー
最近更新されたスレッド
ウィキ募集バナー