【发布时间】:2015-12-09 10:45:53
【问题描述】:
我面临一个问题,我需要将给定输入格式的日期转换为目标格式。在 C# 中是否有任何标准方法可以做到这一点?
例如,假设我们有 yyyy.MM.dd 作为源格式,目标格式是 MM/dd/yyy(当前文化)。
问题出现是因为我使用了一种优先考虑当前文化的解析策略,然后如果失败,它会尝试从已知格式列表中解析。现在假设我们有两个等效日期,一个在上面的源文化中 (2015.12.9),另一个在当前文化中 (9/12/2015)。然后,如果我们尝试解析这两个日期,第一种情况的月份将为 12,第二种情况下的月份为 9,因此我们有一个不一致的地方(它们应该意味着相同的确切日期)。
我相信如果存在它应该是
DateTime.Convert(2015.12.9, 'yyyy/MM/dd', CultureInfo.CurrentCulture).
有什么想法吗?
编辑:
感谢大家的意见和建议,但是大多数人对我的问题的解释并不完全正确。你们大多数人回答的是给定格式的直接解析,然后转换为 CurrentCulture。
DateTime.ParseExact("2015.12.9", "yyyy.MM.dd", CultureInfo.CurrentCulture)
这仍将返回 12 作为月份,尽管它是 CurrentCulture 格式。因此,我的问题是,是否有任何标准方法可以将 yyyy.MM.d 中的日期转换为 MM/dd/yyy 格式,以便月份现在位于正确的位置,THEN 在目标文化中解析它。这样的功能很可能不存在。
【问题讨论】:
-
或者,Datetime.TryParse 获取格式信息(链接页面上的示例)。
-
如果当前文化是
yyyy-mm-dd,传入日期是09/12/2015,你会怎么做?你无法知道传入日期是mm/dd/yyyy还是dd/mm/yyyy -
没错。我放弃了这个。这是我的主管的要求,但我只是让他相信这是不可能的,我们必须克服这个问题的唯一方法是检测数据中给定日期时间所持有的格式,然后重新启动解析,强制使用它直到找到正确解析所有数据的格式。
-
您应该在第一句话中更加具体,因为“以任何格式”是一个非常普遍的问题,正如 Matthew Watson 指出的那样,您在这里遇到了逻辑上的不一致,例如 dd/mm 和 mm/dd 所以它几乎不可能,你的第二句话表明你有一个单一的输入格式,如图所示。您能否将问题缩小到特定的输入格式?
-
@JPK,我的编辑是否澄清了这一点?