gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:12:18 26 4
gpt4 key购买 nike

在我的数据库中,我有一个类型为 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# 方法允许我在不编写所有这些代码的情况下执行此转换?

最佳答案

绝对 - 使用 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 列中?您可以改为修复您的模式吗?

关于c# - 在 C# 中将字符串 (yyyyMMddhhmm) 转换为 DateTime 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9261649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com