Интересная тема!
У меня есть приложение, которое читает файл Excel и позволяет пользователю экспортировать данные в файл .csv в определяемом пользователем формате .
Я специально хотел предоставить пользователям возможность экспортировать даты в (точно) формат, например, гггг / мм / дд, независимо от информации о культуре их ноутбука.
Я попробовал некоторые из этих предложений, но единственное, что сработало, было предложение Поп-Каталина обернуть любые символы в апострофы:
outputFormat = outputFormat.Replace("/", "'/'");
valueToExport = ImportedDate.ToString(outputFormat);
Похоже, что это единственный способ заставить ToString () использовать точную строку формата, не пытаясь что-либо сделать для конкретной культуры.
Обновление
Я всегда нахожу забавным, когда отвечаю на вопрос StackOverflow, а затем сталкиваюсь с той же ошибкой несколько лет спустя и натыкаюсь на свой собственный ответ!
Как упоминалось во многих из этих ответов, решение заключается в переносе символов косой черты в апострофах, чтобы заставить ToString()
игнорировать настройки культуры.
Итак, если в ваших настройках Культуры в качестве символа разделителя даты используется символ полной остановки (например, "20.07.2015
"), то вот что вы увидите при попытке правильно отформатировать дату Рождества и как Вы можете легко заставить его всегда использовать косую черту:
DateTime dtChristmas = new DateTime(2015, 12, 31);
// This might return "31/12/2015", "31.12.2015", etc, depending on Culture settings
string str1 = dtChristmas.ToString("dd/MM/yyyy");
// ...but these two statements will both *always* return "31/12/2015"
string str2 = dtChristmas.ToString("dd'/'MM'/'yyyy");
string str3 = dtChristmas.ToString("dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);