【问题标题】:Universal string to date conversion c#通用字符串到日期转换c#
【发布时间】:2014-04-08 09:23:35
【问题描述】:

是否有可用的通用字符串到日期转换方法。我有一种情况,我将日期时间值作为字符串获取,但该值可以是任何有效的日期时间格式。

如何在 C# 中将其解析为 DateTime 对象?

编辑

我有一个可能的格式列表,但可能非常大。我已经阅读过 DateTime.Parse(string value, string[] format,culture, style) 方法,我可以在格式参数中传递多种格式和将匹配一种可能的格式。那么这种方法会对性能产生多大影响? ——

【问题讨论】:

  • 从我看到的地方,你的要求是不可能的......假设我给你这个输入:01/02/03 11:22:33,你会怎么猜原始格式?如果你不能,电脑会怎么做?如果您的输入是几种不同的格式,如果您在解析时想要准确的结果,则需要将格式与数据一起输入。
  • 我有一个可能的格式列表,但可能非常大。我已经阅读过 DateTime.Parse(string value, string[] format,culture, style) 方法,我可以在其中传递多种格式在格式参数中,其中一种可能的格式将被匹配。那么这种方法会对性能产生多大影响?
  • 如果您的输入来自不同的地区,最好的办法是使用该地区的文化来解析数据。
  • 您可以阅读许多文档,事实是,除非非常特殊的情况(例如:25/12/67 22:35:00显然是圣诞节,很可能是在 1967 年,晚上 10:35)

标签: c# date type-conversion


【解决方案1】:

快速回答:通用:没有。

因为存在不明确的书面日期格式。例如。对我来说,今天是“2014 年 8 月 4 日”,但在大西洋以西的历史背景下,可能是上个世纪的 8 月 4 日。1

如果您有要处理的格式子集,则 DataTime.TryParseExact 有一个重载,需要依次尝试一系列格式。

任何不向其传递日期格式的方法都将使用当前的语言环境设置来开始解析:这可能会导致解析无效,因为您不知道输入格式。

最好的解决方案是使用 ISO 格式 (yyyy-MM-dd),其次是从指定系统的人那里获取精确的规则。

编辑:附加。虽然最好的和次优的可能是不可能的,但各种 DataTime parse、try-parse 和 -exact 方法具有接受 IFormatProviderCultureInfo 实现)的重载,这将允许您明确说明源数据。

在性能方面(来自更新的问题):在早期版本的框架中,我详细查看了DateTime.TryParseExact,我似乎记得它只是在成功后立即依次尝试每种格式解析。因此,如果最常见的格式首先出现在数组中,则其性能与单一格式重载几乎没有什么不同。但是(1)如果您需要此功能,那么无论开销如何,您都需要它; (2) 您的应用程序的性能似乎不太可能受此影响很大(例如,与将数据读入应用程序和将其从应用程序中写出的成本相比)。


1 严格来说,这不是真的,我经常使用恕我直言,可怕的美国格式,今天不知道写成“2014-04-08”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多