在C#中将字符串(yyyyMMddhhmm)转换为DateTime的函数

时间:2012-02-13 13:49:13

标签: c# string datetime

在我的数据库中,我的字段日期类型为 varchar ,其中日期以 yyyyMMddhhmm 格式存储,没有空格或其他字符将它们分开。

现在我需要将此日期与C# DateTime 进行比较,因此我需要将字符串转换为 DateTime 。我能想到的最合乎逻辑的方法是从变量date中提取与年,月和日相关的子字符串,并创建一个新的 DateTime 对象:

var year = Convert.ToInt32(date.Substring(0, 4));

var month = Convert.ToInt32(date.Substring(4, 2));

var day = Convert.ToInt32(date.Substring(6, 2));

DateTime dateToCompare = new DateTime(year, month, day);

是否有任何可用的C#方法允许我在不编写所有代码的情况下执行此转换?

4 个答案:

答案 0 :(得分:10)

绝对 - 使用DateTime.ParseExact

DateTime parsed = DateTime.ParseExact(text, "yyyyMMddHHmm",
                                      CultureInfo.InvariantCulture);

请注意HH 24小时而不是hh 12小时格式。

或者,您可以使用DateTime.TryParseExact,它返回true / false值以指示解析是否成功。如果您完全期望所有数据都有效,并且以其他方式抛出异常是合理的,那么DateTime.ParseExact就可以了。

作为一种非常不同的选择,您可以使用Noda Time

// Do this once...
var pattern = LocalDateTimePattern.CreateWithInvariantInfo("yyyyMMddHHmm");

// Do this repeatedly...
var parseResult = pattern.Parse(text);
if (parseResult.Success)
{
    LocalDateTime value = parseResult.Value;
    // Use the value...
}
else
{
    // Error... 
}

或者对于“只是抛出异常”行为,只需无条件地使用parseResult.Value

编辑:顺便说一下,有没有理由为什么你在varchar列中存储日期?你可以修改你的架构吗?

答案 1 :(得分:4)

您可以使用DateTime.ParseExact方法。

答案 2 :(得分:2)

根据我在论坛上发现的内容,以下内容应该有效(我自己没有测试过......)

string dateString = "20060425185231";

DateTime myDate;

myDate = DateTime.ParseExact(dateString,"yyyyMMddHHmmss", new DateTimeFormatInfo());

MessageBox.Show(myDate.ToString());

来源:http://social.msdn.microsoft.com/forums/en-US/csharplanguage/thread/c337c192-8047-4edf-83e2-c3511591c42f/

答案 3 :(得分:2)

试试这个:

string dateString;
string format;
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;

dateString = "201202130955";
format = "yyyyMMddhhmm"

result = DateTime.ParseExact(dateString, format, provider);