在我的数据库中,我有一个日期类型的字段varchar其中日期以以下格式存储yyyyMMddhhmm,没有空格或其他字符分隔它们。
现在我需要将此日期与 C# 进行比较DateTime,因此我需要将字符串转换为DateTime。我能想到的最合乎逻辑的方法是从变量中提取date
与年、月、日相关的子字符串并创建一个新的DateTime object:
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# 方法允许我执行此转换而无需编写所有这些代码?
绝对-使用DateTime.ParseExact http://msdn.microsoft.com/en-us/library/system.datetime.parseexact.aspx:
DateTime parsed = DateTime.ParseExact(text, "yyyyMMddHHmm",
CultureInfo.InvariantCulture);
请注意HH
24 小时而不是hh
适用于 12 小时制。
或者,您可以使用DateTime.TryParseExact http://msdn.microsoft.com/en-us/library/system.datetime.tryparseexact.aspx,它返回一个 true/false 值来指示解析是否成功。如果您完全期望所有数据都有效,并且抛出异常是合理的,那么DateTime.ParseExact
很好。
作为一个非常不同的替代方案,您可以使用野田时间 http://noda-time.googlecode.com:
// 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
无条件地。
编辑:顺便说一句,有什么原因吗why您将日期存储在 varchar 列中吗?您可以修复您的架构吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)