C# “我想转换日期”;2018-05-18 17:16:24.570“;至;2018年7月26日上午10:42;C格式#

C# “我想转换日期”;2018-05-18 17:16:24.570“;至;2018年7月26日上午10:42;C格式#,c#,datetime,C#,Datetime,我正在从数据库中以字符串的形式检索日期,然后需要对其进行转换。这样可以以不同的格式打印。 我正在使用 string date = dr[2].ToString(); date = DateTime .ParseExact(date,"yyyy-MM-dd hh:mm:ss.fff tt ",new CultureInfo.InvariantCulture("enUS")); 但这不起作用: System.FormatException:'字符串未被识别为有效的 日期时间。” 如果使用字符

我正在从数据库中以
字符串
的形式检索日期,然后需要对其进行转换。这样可以以不同的格式打印。 我正在使用

string date = dr[2].ToString();

date = DateTime
  .ParseExact(date,"yyyy-MM-dd hh:mm:ss.fff tt ",new CultureInfo.InvariantCulture("enUS"));
但这不起作用:

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


如果使用
字符串
,可以将
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]
fragment);如果是您的情况,
Convert
是比
ParseExact
更好的选择(前提是RDBMS有相应的
Date
字段):

编辑:如果您想将时间从UTC更改为时区,您可以尝试
TimeZoneInfo
(查看所有可用时区),例如


如果使用
字符串
,可以将
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]
fragment);如果是您的情况,
Convert
是比
ParseExact
更好的选择(前提是RDBMS有相应的
Date
字段):

编辑:如果您想将时间从UTC更改为时区,您可以尝试
TimeZoneInfo
(查看所有可用时区),例如



日期没有格式。它们是二进制值。没有什么可以改变的。一切正常。当您试图向最终用户显示日期时,请在视图、窗体、文本框上使用适当的格式字符串或CultureInfo或用于显示日期的任何内容。在字符串和日期时间之间转换时,格式很重要。当它存储在datetime中时,它没有格式。避免不必要地将正确类型的数据转换为字符串,只是为了避免将数据转换回正确的数据类型时出现问题。什么是
dr[2]
?您可以使用
date.ToString(“MM/dd/yyyy”)
是的,刚才我意识到他想要转换的日期和预期的结果完全不同。日期没有格式。它们是二进制值。没有什么可以改变的。一切正常。当您试图向最终用户显示日期时,请在视图、窗体、文本框上使用适当的格式字符串或CultureInfo或用于显示日期的任何内容。在字符串和日期时间之间转换时,格式很重要。当它存储在datetime中时,它没有格式。避免不必要地将正确类型的数据转换为字符串,只是为了避免将数据转换回正确的数据类型时出现问题。什么是
dr[2]
?您可以使用
date.ToString(“MM/dd/yyyy”)
是的,刚才我意识到他想要转换的日期和预期的结果完全不同。当我使用它时,我得到一个错误:-System.FormatException:“字符串未被识别为有效的日期时间。”我试图获取存储在表中的日期,然后将其与网页上显示的日期进行比较。使用selenium@MahakMalik:请提供格式错误的字符串示例。dr[2]是使用查询获取的行。我看到:
dr[2]
DataReader dr
的第二列。它是否包含
日期时间
,而不是
字符串
?谢谢,我明白了
@“从…中选择FirstName、LastName、QueryDate
QueryDate
类型的
Date
(或
DateTime
或类似类型)?当我使用此选项时,出现错误:-System.FormatException:“字符串未被识别为有效的日期时间。”我试图获取存储在表中的日期,然后将其与网页上显示的日期进行比较。使用selenium。@Mahak Malik:请提供格式错误的字符串示例。dr[2]是使用查询获取的行。我看到:
dr[2]
DataReader dr
的第二列。它的字段是否包含
DateTime
,而不是
String
?谢谢,我明白了;
@“选择FirstName,LastName,QueryDate from…
QueryDate
类型的
(或
DateTime
或类似)?
  //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"));