2

大家好,

在此之前,我在带有 Microsoft Window XP 的 VM 中安装了 ac# 系统。我有一些将字符串转换为日期时间的代码,以下是我的代码的一部分:

DateTime allowDateTime = DateTime.Now.AddMonths(-2);
string formatted = allowDateTime.ToString("M/dd/yyyy");
DateTime dt = Convert.ToDateTime(formatted);

if (redempDateConvert < dt)
   td.Text = "";

到目前为止,一切正常。之后,我移动我的所有源代码而不做任何更改,并在我的真机(Window 7)中设置数据库。

系统工作正常,我仍然能够像往常一样登录和控制系统。

直到今天,我已经到达这部分,并且浏览器显示错误消息: String was not recognized as a valid DateTime.在第 397 行。

在这里我再次显示了我的代码(带有解释):

    DateTime allowDateTime = DateTime.Now.AddMonths(-2);
    string formatted = allowDateTime.ToString("M/dd/yyyy");
    DateTime dt = Convert.ToDateTime(formatted);  //here is line 397, which is the error happening.

    if (redempDateConvert < dt)
       td.Text = "";

我已经检查了(VM 和我的真实机器)环境,它们都在 .Net 4.0 中运行。

只是好奇为什么相同的代码,但在我的真机中发生错误。是我错过了配置的东西吗?好心提醒。

4

4 回答 4

5

这是因为/意味着默认日期分隔符,你的机器有不同的文化。如果您总是获取/日期分隔符并且具有接受-作为日期分隔符的文化,它将失败。

使用 ParseExact 来避免不同文化的错误:

DateTime dt = DateTime.ParseExact(formatted, "M/dd/yyyy", null);

/无论您将使用哪种文化,上面的代码都会将日期解析为日期分隔符

于 2013-10-29T11:30:16.323 回答
3

使用DateTime.ParseExact()

DateTime dt = DateTime.ParseExact(formatted, "M/dd/yyyy", null);
于 2013-10-29T11:28:26.863 回答
2

这是Convert.ToDateTime反编译时方法的样子;

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

如您所见,此方法将DateTime.Parse方法与您的CurrentCulture. 如果您的字符串与您当前的文化日期格式不匹配,您的代码将被破坏。这就是您收到此错误的原因。

只是好奇为什么相同的代码,但在我的真机中发生错误。是我错过了配置的东西吗?

/分隔符具有“用当前区域性的日期分隔符替换我”的特殊含义

可能您的虚拟机和真机具有不同的文化,这就是它们具有不同日期分隔符的原因。

于 2013-10-29T11:33:22.747 回答
0
DateTime dt = DateTime.Now; // get current date time
txtFormat.Text = string.Format("{0:yyyy/dd/MMM hh:mm:ss}", dt); // you can specify format according to your need

格式可以如dd/mm/yy dd/mmm/yyyy mmm/dd/yy mm/dd/yy mm/dd/yyyy

注意:您可以在格式中使用任何分隔符。

于 2015-06-23T11:04:05.917 回答