2014-02-05 24 views
4

是否有可能将string(数据库中存储为varchar的日期)转换为c#中的datetime如何将字符串转换为C#中的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"); 

获得值1/1/0001 12:00.. in dt

可能是什么原因?还需要以何种格式通过日期(dt以上情况)至DateTime.TryParseExact(..)

+4

一个'DateTime'不*有*的格式。你传递给TryParseExact的格式是你想要解析的字符串*的格式。 –

+15

_“将日期存储为varchar的表”_这是具有更高优先级的问题。 –

+0

明显的日期不应该被存储为varchar。 MMDDYY也不是世界上大部分地区的日期格式。您是否正在寻找一种针对这种特定情况的硬编码解决方案,或者是一种更一般的解决方案? –

回答

5

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

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"); 
+0

正在获取值1/1/0001 12:00:00 AM id d – user3085995

+0

@ user3085995:我怀疑'TryParseExact'正在返回'false',那么 - 你不应该忽略它。 –

+0

'ToString'应该使用'MM',而不是'mm'。 –

0
  String date = "01/21/14 11:42:36 PM"; 
      DateTime dt = Convert.ToDateTime(date); 
      var output = dt.ToString("yyyy-MM-dd");