是否有可用的通用字符串到目前为止的转换方法。我有一种情况,我将datetime值作为字符串,但值可以是任何有效的日期时间格式。
如何在C#中将其解析为DateTime对象?
修改
我有一个可能的格式列表,但可能非常大..我读过有关DateTime.Parse(字符串值,字符串[]格式,文化,样式)的方法,我可以在格式参数中传递多种格式其中一种可能的格式是匹配的。那么这种方法会产生多大的性能影响? -
答案 0 :(得分:3)
快速回答:普遍:不。
因为书面日期格式不明确。例如。今天对我来说是“08/04/14”,但是在大西洋西部的历史背景下,可能是上个世纪8月的 th 。 1
如果您要处理的格式子集,则DataTime.TryParseExact
会出现重载,需要依次尝试一系列格式。
任何未传递日期格式的方法都将使用当前的语言环境设置来启动解析:由于您不知道输入格式,这可能导致无效的解析。
最好的解决方案是使用ISO格式(yyyy-MM-dd
),其次是从指定系统的任何人那里获得精确的规则。
编辑:补充。尽管可能无法实现最佳和次佳,但各种DataTime
解析,try-parse和-exact方法都具有接受IFormatProvider
(CultureInfo
实现)的重载,这将允许您明确数据来源。
在性能方面(来自更新的问题):在早期版本的框架中,我详细查看了DateTime.TryParseExact
,我似乎记得它只是尝试了每种格式,一个成功的解析。因此,如果最常见的格式是数组中的第一个,则其性能与单个格式的重载差别不大。但是(1)如果你需要这个功能,那么你需要它,无论开销如何; (2)您的应用程序的性能似乎不太可能受此影响(与将数据读入应用程序并将其写入应用程序的成本相比)。
1 严格来说,这不是真的,我经常使用恕我直言,可怕的美国格式知道今天要写成“2014-04-08”。