Коварный символ ‘/’ в custom формате даты
- modified:
- reading: 1 minutes
Вопрос, какую директорию создаст этот код?
string sole = DateTime.Today.ToString("yyyy/MM/dd");
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, sole);
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
Вчера для меня было шоком, что, вроде, логично ожидать директорию вроде “…/2010/08/29”, а я получил “…/2010.08.29”. Запускаем этот код:
CultureInfo[] cultureInfos = CultureInfo.GetCultures(CultureTypes.AllCultures);
foreach (var cultureInfo in cultureInfos)
{
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
string sole = DateTime.Today.ToString("yyyy/MM/dd");
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, sole);
Console.WriteLine(path);
}
Console.ReadKey();
И смотрим:
В общем, раньше не встречался с этой фичей, а оказывается - это специальный символ в custom формате, который подставляется на значение из DateTimeFormatInfo.DateSeparator (такой же есть и для времени). Как хорошо, что у нас разделитель точка, а вот другие страны мучаются и не понимают, почему их формат “dd/MM/yyyy” не работает, во время я осознал проблему и подсказал об этой фиче.
Все мелочи не запомнишь, и многое просто проскальзывает, .NET расширяется с каждым годом, и даже базовые вещи уже не все помнишь. Вы, кстати, знали об этой фиче? Были ли подобные неожиданные встречи?