如何在 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