如何在 C# 中将字符串转换为 DateTime?

Posted

技术标签:

【中文标题】如何在 C# 中将字符串转换为 DateTime?【英文标题】:How to convert string to a DateTime in C#? 【发布时间】:2014-03-01 17:23:28 【问题描述】:

是否可以在c#中将string(数据库中存储为varchar的日期)转换为datetime

例如。我有一个将日期存储为 varchar 的表,并将值存储为示例

01/21/14 11:42:36 PM

我想得到yyyy-mm-dd格式的结果

我试过了,

CultureInfo enUS = new CultureInfo("en-US");
DateTime d;
DateTime.TryParseExact("01/21/14 11:42:36 PM", "yyyy-mm-dd", enUS, DateTimeStyles.None, out d);

也尝试了以下步骤:

CultureInfo enUS = new CultureInfo("en-US");
DateTime d = Convert.ToDateTime("01/21/14 11:42:36 PM");
string dt = Convert.ToString(d);
DateTime.TryParseExact(dt, "MM/dd/yy hh:mm:ss tt", enUS, DateTimeStyles.None, out d);
var output = d.ToString("yyyy-mm-dd");

dt 中获取值1/1/0001 12:00..

可能是什么原因?我还需要以哪种格式将日期(上述情况下为dt)传递给DateTime.TryParseExact(..)

【问题讨论】:

DateTime 没有具有格式。您传递给TryParseExact 的格式是您尝试解析的字符串的格式 “将日期存储为 varchar 的表” 这是一个优先级更高的问题。 显然日期不应该存储为 varchar。 MMDDYY 也不是世界上大多数地方的日期格式。您是在寻找一种针对这种特定情况的硬编码解决方案,还是更通用的解决方案? 【参考方案1】:

调用的第二个参数应该是您传递的格式。创建日期时间后,您可以指定输出格式:

CultureInfo enUS = new CultureInfo("en-US");
DateTime d;
DateTime.TryParseExact("01/21/14 11:42:36 PM", "MM/dd/yy hh:mm:ss tt", enUS, DateTimeStyles.None, out d);

var output = d.ToString("yyyy-MM-dd");

【讨论】:

获取值 1/1/0001 12:00:00 AM id d @user3085995:我怀疑 TryParseExact 正在返回 false - 你不应该忽视这一点。 ToString 应该使用MM,而不是mm @JonSkeet:TryParseExact 返回false 的原因可能是什么 @user3085995:嗯,我们不知道您是否使用了迄今为止向我们展示的 exact 输入。但大概输入与给定格式不匹配。不知道你在传递什么,很难再说什么。【参考方案2】:
            String date = "01/21/14 11:42:36 PM";
            DateTime dt = Convert.ToDateTime(date);
            var output = dt.ToString("yyyy-MM-dd");

【讨论】:

以上是关于如何在 C# 中将字符串转换为 DateTime?的主要内容,如果未能解决你的问题,请参考以下文章

在 c# 中将时间字符串转换为不同的 DateTime 格式 [关闭]

在 C# 中将 APRIL,03/2013 字符串转换为 DateTime [重复]

在 C# 中将字符串转换为 DateTime 并写入 SQL

如何在c#中将字符串转换为日期[重复]

在 C# 中将 dateTime 转换为 ISO 格式 yyyy-mm-dd hh:mm:ss [重复]

如何在 C# 中将字节 [] 转换为日期时间?