【问题标题】:How to convert string to a DateTime in C#?如何在 C# 中将字符串转换为 DateTime?
【发布时间】: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 也不是世界上大多数地方的日期格式。您是在寻找一种针对这种特定情况的硬编码解决方案,还是更通用的解决方案?

标签: c# sql sql-server-2008 datetime converter


【解决方案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");

【讨论】:

    猜你喜欢
    • 2021-03-31
    • 2014-03-30
    • 1970-01-01
    • 2012-05-05
    • 2011-05-04
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2020-07-13
    相关资源
    最近更新 更多