2017-10-19 180 views
1

如何将字符串(如"10/19/2017 12:00:00 AM")转换为DateTime?我用Convert.ToDateTime()但它给出了一个错误;将字符串转换为DateTime Asp.Net

字符串未被识别为有效的DateTime。

如何修复?

+0

'DateTime.Parse(“10/19/2017 12:00:00 AM”)'或ParseExact – CodingYoshi

+1

[将字符串解析为C#中DateTime的字符串](https://stackoverflow.com/questions/5366285/)因为'AM'和'PM'指示符用于[12小时制](https:// en.wikipedia.org/wiki/Delphi_Display-date-in-c-sharp) – Fabio

回答

2

您应该使用ParseExact

var result = DateTime.ParseExact("10/19/2017 12:00:00 PM", "MM/dd/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture); 
+0

感谢它的运作.. :) :) – user111

+0

wikipedia.org/wiki/12-hour_clock),我认为使用'hh'而不是'HH'说明符会更好。 –

2

Convert.ToDateTime没有指定格式解析,您需要使用DateTime.ParseExactDateTime.TryParseExact

// DateTime.ParseExact 
DateTime date = DateTime.ParseExact("10/19/2017 12:00:00 PM", "MM/dd/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture); 

// DateTime.TryParseExact 
DateTime.TryParseExact("10/19/2017 12:00:00 PM", "MM/dd/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out date); 
+0

由于'AM'和'PM'指示符用于[12小时制](https://en.wikipedia.org/wiki/12-hour_clock),所以我认为使用'hh'代替'HH'说明符。 –

2
String MyString= "10/19/2017 12:00:00 AM"; 
     DateTime MyDateTime = new DateTime(); 
     MyDateTime = DateTime.ParseExact(MyString, "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture); 

格式变为如下

d - 没有前导零的月份的数字日。

dd - 具有前导零的月份的数字日。

ddd - 星期几的缩写名称。

dddd - 星期几的全名。

f,ff,fff,ffff,fffff,ffffff,fffffff - 第二部分。精度越高Fs越高。

h - 12小时制时钟,无前导零。

hh - 带前导零的12小时制时钟。

H - 24小时制时钟,没有前导零。

HH - 带领先零的24小时制时钟。

m - 没有前导零的分钟数。 毫米 - 带前导零的分钟。

M - 没有前导零的数字月份。

MM - 带前导零的数字月份。

MMM - 月份的缩写名称。

MMMM - 全月名称。

s - 秒没有前导零。 ss - 带前导零的秒。

t - AM/PM但只有第一个字母。 tt - 上午/下午(上午/下午)

y - 带出世纪和领先零的年份。

yy - 带出世纪的年份,领先零。

yyyy - 与世纪的一年。

zz - 用+/-设置时区。

+0

你不需要'DateTime MyDateTime = new DateTime();'因为你将会创建新的日期'DateTime MyDateTime = DateTime.ParseExact(...'就足够了。 – Fabio