有趣的话题!
我有一个读取 Excel 文件的应用程序,并允许用户以 用户定义的格式将其数据导出到 .csv 文件。
我特别想让用户能够将日期导出为(完全)像 yyyy/mm/dd 这样的格式,而不管他们笔记本电脑的文化信息如何。
我尝试了其中一些建议,但唯一有效的是 Pop Catalin 的建议,即用撇号包装任何 / 字符:
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);