Cic*_*ami 3 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);
Run Code Online (Sandbox Code Playgroud)
是否有任何可用的C#方法允许我在不编写所有代码的情况下执行此转换?
Jon*_*eet 10
绝对 - 使用DateTime.ParseExact:
DateTime parsed = DateTime.ParseExact(text, "yyyyMMddHHmm",
CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
请注意HH24小时而不是hh12小时格式.
或者,您可以使用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...
}
Run Code Online (Sandbox Code Playgroud)
或者对于"只是抛出异常"行为,只需parseResult.Value无条件使用.
编辑:顺便说一句,没有任何理由为什么你存储日期varchar列?你可以修改你的架构吗?
| 归档时间: |
|
| 查看次数: |
9945 次 |
| 最近记录: |