DateTime型のToStringメソッド

納めたプログラムが英語環境だと動かないと指摘があった。原因はDateTime型のToStringメソッドの挙動を誤解していたせいだった。国内ならあまり気にしない部分だった。
SQLの日付条件で
Where CONVERT(nvarchar(10), 日付フィールド, 111) = '2009/12/01'
というようにしているのだが、この条件部分を
Now.ToString("yyyy/MM/dd")
と渡していた。ぶっちゃけ書式フォーマット内のスラッシュはそのまま出力されるものだと思っていた。MSDNを見て愕然とした。

/ 現在の DateTimeFormatInfo.DateSeparator プロパティで定義されている日付の区切り記号を表します。この区切り記号は、年、月、および日を区別するために使用されます。

コントロールパネルから区切り文字をハイフンに変更し確認してみると、
Now.ToString("yyyy/MM/dd")
の結果は
2009-12-01
となった。確実にスラッシュを出力するには
Now.ToString("yyyy\/MM\/dd")
といようにエスケープしなければいけない。んー、ショック。