【问题标题】:String was not recognized as a valid DateTime for format yyMMdd字符串未被识别为格式 yyMMdd 的有效日期时间
【发布时间】:2017-11-20 17:54:46
【问题描述】:

我有一个如下字符串:

"9/30/2017 12:00:00 AM"

希望将其转换为格式yyMMdd

 var evan = dataRow["ValueDate"].ToString(); //Output is "9/30/2017 12:00:00 AM"  
 DateTime dt = DateTime.ParseExact(evan,"yyMMdd",CultureInfo.InvariantCulture);

比显示:

dt.ToString("yyMMdd");

错误消息:字符串未被识别为有效的日期时间 格式 yyMMdd

我的错误是什么?

谢谢

【问题讨论】:

  • DateTime.ParseExact 期望您提供的数据采用您指定的精确格式。您的字符串 9/30/2017 12:00:00 AM 与您的格式不匹配 yyMMdd

标签: c# datetime


【解决方案1】:

ParseExact 用于解析以特定格式输入的字符串。要显示字符串,请将格式字符串传递给ToString 方法:

var evan = dataRow["ValueDate"].ToString("yyMMdd");

【讨论】:

  • 谢谢,是的,但我需要将其转换为格式yyMMdd,而不仅仅是显示它
  • @napi15 “转换它”是什么意思?
  • DateTimeDateTime。没有“转换”。您所指的格式仅用于显示目的。
  • 啊!现在我明白了,非常感谢您的澄清
【解决方案2】:

DateTime.ParseExact 期望您提供的数据采用您指定的 EXACT 格式。您的字符串 9/30/2017 12:00:00 AM 与您的格式 yyMMdd 不匹配。所以要么尝试只使用DateTime.Parse,要么让你的格式与数据匹配。像

DateTime dt = DateTime.ParseExact(evan,"M/dd/yyyy HH:mm:ss tt",CultureInfo.InvariantCulture);`

那你应该可以dt.ToString("yyMMdd");

【讨论】:

  • 非常有帮助,谢谢,我用你的英特尔解决了我的问题。谢谢
【解决方案3】:

从海报中收集情报后,我成功理解并解决了我的错误:

经过仔细咨询MSDN这是我正在寻找的解决方案:

输入

dataRow["ValueDate"].ToString() //  "9/30/2017 12:00:00 AM"

代码:

 DateTime convertedDate;
 convertedDate=Convert.ToDateTime(dataRow["ValueDate"].ToString());
 var evan = convertedDate.ToString("yyMMdd");  

输出:

"170930" //just like I need

就像迈克尔·夏普之前解释的那样:

DateTime.ParseExact 期望您提供的数据采用您指定的 EXACT 格式。我的字符串9/30/2017 12:00:00 AM 与我的格式yyMMdd 不匹配

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多