我想在 C# 中将日期"2018-05-18 17:16:24.570"转换为"7/26/2018, 10:42 AM"格式



我正在从数据库中以string的形式检索日期,然后需要对其进行转换。因此,它以不同的格式打印。我正在使用

string date = dr[2].ToString();
date = DateTime
.ParseExact(date,"yyyy-MM-dd hh:mm:ss.fff tt ",new CultureInfo.InvariantCulture("enUS"));

但这不起作用:

System.FormatException:'字符串未被识别为有效日期时间。'

如果使用string,可以先放ParseExact,然后放ToString:

string date = "2018-05-18 17:16:24.570";
// 5/18/2018 05:16 PM
date = DateTime
.ParseExact(date, "yyyy-M-d H:m:s.fff", CultureInfo.InvariantCulture)
.ToString("M/dd/yyyy hh:mm ttt", CultureInfo.GetCultureInfo("en-US"));

然而,您似乎正在使用DataReader(dr[2]片段(;如果是您的情况,Convert是比ParseExact更好的选择(前提是RDBMS具有相应的Date字段(:

string date = Convert
.ToDateTime(dr[2])
.ToString("M/dd/yyyy hh:mm ttt", CultureInfo.GetCultureInfo("en-US")); 

编辑:如果您想将时间从UTC更改为时区,您可以尝试TimeZoneInfo(请参阅此处的所有可用时区(,例如

//TODO: Put the right Time Zone Id here 
// Or should it be "Arabian Standard Time"? I've tried to guess 
TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById("Atlantic Standard Time");
string date = TimeZoneInfo
.ConvertTimeFromUtc(Convert
.ToDateTime(dr[2]), zone)
.ToString("M/dd/yyyy hh:mm ttt", CultureInfo.GetCultureInfo("en-US")); 

最新更新