如果我有一个奇怪格式的日期时间字符串,例如YYYY##MM##DD HH**M**SS
,我怎样才能基于它创建一个新的日期时间对象?我读过一些关于 datetimeformatinfoclass 但不知道如何让它工作的东西。
问问题
30139 次
2 回答
28
对于您不确定的数据,您可以使用 DateTime.ParseExact 或 DateTime.TryParseExact。例如:
using System;
class Test
{
static void Main()
{
string formatString = "yyyy'##'MM'##'dd' 'HH'*'mm'*'ss";
string sampleData = "2010##02##10 07*22*15";
Console.WriteLine(DateTime.ParseExact(sampleData,
formatString,
null));
}
}
格式字符串中的引号不是绝对必要的 - 这也可以:
string formatString = "yyyy##MM##dd HH*mm*ss";
但是,使用引号意味着您明确表示引号之间的字符将按字面意思使用,而不是被理解为模式字符 - 因此,如果您将“#”更改为“/”,则使用引号的版本肯定会使用“/ " 而没有的版本将使用特定于文化的值。
在null
调用中的ParseExact
意思是“使用当前的文化”——在这种情况下,它不太可能产生很大的不同,但一个常用的替代方法是CultureInfo.InvariantCulture
.
不幸的是,没有办法让 BCL 解析格式字符串并保留信息;我自己的Noda Time项目纠正了这种情况,我希望它能更快地解析和格式化 - 但目前还远未准备好生产。
于 2010-02-10T07:23:40.553 回答
7
您可以使用DateTime.ParseExact方法并传递您需要的格式。
于 2010-02-10T07:20:05.740 回答