【问题标题】:String was not recognized as a valid DateTime When Converting String to DateTime将字符串转换为日期时间时,字符串未被识别为有效的日期时间
【发布时间】:2023-03-15 03:50:01
【问题描述】:

问题

我正在尝试将String 转换为DateTime 格式并再次将DateTime 转换为String

案例#1

string time = "20120718 00:56:03";
DateTime theTime =DateTime.ParseExact(time,"MM-dd-yyyy HH:mm:ss",CultureInfo.InvariantCulture,DateTimeStyles.None);
string convertedTime = theTime.ToString("MM-dd-yyyy HH:mm:ss");

案例#2

string time = "20120718 00:56:03";
string CallDate_DBFormat = Convert.ToDateTime(time).ToString("MM-dd-yyyy HH:mm:ss");
DateTime CallTime = Convert.ToDateTime(CallDate_DBFormat);
string convertedTime = CallTime.ToString("MM-dd-yyyy HH:mm:ss");

在这两种情况下,我都会遇到

字符串未被识别为有效的日期时间

【问题讨论】:

  • 查看您指定的格式...然后查看数据的实际格式。
  • 你的CurrentCulture是什么?
  • CurrentCultureen
  • @aa003 有 13 个以en 开头的文化名称。究竟是哪一个?
  • 它的“en”<globalization uiCulture="en" />

标签: c# asp.net string datetime


【解决方案1】:

来自documentation of DateTime.ParseExact method

将日期和时间的指定字符串表示形式转换为其 使用指定格式和特定​​区域性的等效日期时间 格式信息。 字符串表示的格式必须匹配 完全符合指定的格式。

在您的情况 #1 中,它们不是。请改用yyyyMMdd HH:mm:ss 格式。

string time = "20120718 00:56:03";
DateTime theTime = DateTime.ParseExact(time,"yyyyMMdd HH:mm:ss",
                                       CultureInfo.InvariantCulture,
                                       DateTimeStyles.None);
string convertedTime = theTime.ToString("MM-dd-yyyy HH:mm:ss");

对于案例 #2,我们需要知道您的 CurrentCulture 属性。为什么?

因为此方法使用DateTime.Parse 方法和CurrentCulture。这是implemented;

public static DateTime ToDateTime(String value)
{
     if (value == null)
         return new DateTime(0);
     return DateTime.Parse(value, CultureInfo.CurrentCulture);
}

可能yyyyMMdd HH:mm:ss 格式不是CurrentCulture 的标准日期和时间格式,这就是此方法抛出FormatException 的原因。

【讨论】:

  • CurrentCultureen
  • case#2 怎么样? CurrentCultureen 我不想直接指定这种格式 yyyyMMdd HH:mm:ss 而是想要这个 MM-dd-yyyy HH:mm:ss
  • 它的“en”<globalization uiCulture="en" />
【解决方案2】:

这样做。您设置了无效的格式来将字符串解析为DateTime 查看您的DateTime 字符串格式。

string time = "20120718 00:56:03";
DateTime theTime =DateTime.ParseExact(time,"yyyyMMdd HH:mm:ss",CultureInfo.InvariantCulture,DateTimeStyles.None);
string convertedTime = theTime.ToString("MM-dd-yyyy HH:mm:ss");

【讨论】:

    【解决方案3】:

    使用这个:

     string time = "20120718 00:56:03";
            DateTime theTime = DateTime.ParseExact(time, "yyyyMMdd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None);
            string convertedTime = theTime.ToString("yyyy-dd-MM HH:mm:ss");
    

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多