如果我使用的是这样的:将日期转换为具有特定格式的字符串时,是否需要提供IFormatProvider?
DateTime.Now.Date.ToString("yyyy-MM-dd")
的FxCop抱怨说我违反了CA1305和说我应该提供商的IFormatProvider。我需要吗?无论如何,我都是以特定的格式请求日期(这是我期望将其放入XML中的格式)。
提供一个格式提供程序有什么区别吗?在这种情况下可能会产生错误的结果?
如果我使用的是这样的:将日期转换为具有特定格式的字符串时,是否需要提供IFormatProvider?
DateTime.Now.Date.ToString("yyyy-MM-dd")
的FxCop抱怨说我违反了CA1305和说我应该提供商的IFormatProvider。我需要吗?无论如何,我都是以特定的格式请求日期(这是我期望将其放入XML中的格式)。
提供一个格式提供程序有什么区别吗?在这种情况下可能会产生错误的结果?
所以经过多一点研究之后,似乎在我的例子中它没有任何区别,但是在一般情况下,月份可能会显示在特定的区域中。
更多细节在这里:
为什么你不希望指定的格式提供?
如果只是懒惰,那么我可以推荐定义两个片段。 CultureInfo.InvariantCulture的ic和CultureInfo.CurrentCulture的cc。
永远不要假设任何有关如何转换为字符串与默认文化的作品。并非世界上每个人都使用公历。有一天,你的客户可能会雇用一台带有另一个日历的计算机的承包商作为默认设备,然后你不会生成正确的XML。向你的客户解释你不想遵循FxCop的建议。
最好的事情是如果.Net包含Xml文化。然后,你可以只是做
DateTime.Today.ToString("d", CultureInfo.Xml)
出于某种原因,微软选择创建一个单独的类,而不是XmlConvert。自从.Net 1.0以来,这个类就一直存在。
XmlConvert.ToString(DateTime.Today, "yyyy-MM-dd")
将始终创建正确的Xml日期。
不确定它是否是错误或预期行为,但XmlConvert.ToString(DateTime.Today, "d")
不会创建有效的Xml日期。