C# 仅在主机上出错,而不是在我的计算机上;字符串未被识别为有效的日期时间

C# 仅在主机上出错,而不是在我的计算机上;字符串未被识别为有效的日期时间,c#,asp.net,visual-studio-2015,host,C#,Asp.net,Visual Studio 2015,Host,我的处境很糟糕。我有一个程序,它在我的计算机上运行得很好,但当我将它上载到主机上时,它会给我以下错误:“字符串未被识别为有效的日期时间”。我的程序在ASP.net C#visual studio 2015上 编辑: 我的电脑和主机上的日期格式都相同。喜欢 这是:“mm/dd/yyyy” 你能帮帮我吗? 这是我的密码: HTML: 问题很可能是主机上的区域设置不同 要解决此问题,请确保将预期的CultureInfo传递给转换方法: 请参见下文,应用于您的代码。您需要替换CultureIn

我的处境很糟糕。我有一个程序,它在我的计算机上运行得很好,但当我将它上载到主机上时,它会给我以下错误:“字符串未被识别为有效的日期时间”。我的程序在ASP.net C#visual studio 2015上

编辑:
我的电脑和主机上的日期格式都相同。喜欢 这是:“mm/dd/yyyy”

你能帮帮我吗? 这是我的密码: HTML:





问题很可能是主机上的区域设置不同

要解决此问题,请确保将预期的CultureInfo传递给转换方法:

请参见下文,应用于您的代码。您需要替换CultureInfo构造函数中的相关区域性字符串:

System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US");

year = Convert.ToInt32(pc.GetYear(Convert.ToDateTime(statusCell1.Text,culture)));
month = Convert.ToInt32(pc.GetMonth(Convert.ToDateTime(statusCell1.Text,culture)));
day = Convert.ToInt32(pc.GetDayOfMonth(Convert.ToDateTime(statusCell1.Text,culture)));

我注意到在代码的
c#
部分,您使用了重载。如果您正在使用它,那么您传递的字符串将使用运行此代码的机器的区域设置进行转换。因此,最可能的原因是本地计算机和主机的区域设置不同

有两件事你可以尝试:

  • 将计算机上的区域设置更改为主机上的设置。很可能错误也会出现在本地系统上
  • 尝试使用重载。这将确保无论您的本地设置如何,转换始终以相同的方式执行

  • 如果从Sql返回的数据是DateTime(数据类型是DateTime),则可以直接在Gridview中为日期列设置日期格式,如下所示:

    <asp:BoundField HeaderText="Birth Date" DataField="birthday" DataFormatString="{0:yyyy/MM/dd}" HtmlEncode="false" >
    

    请排除不必要的代码,请说明您在转换.ToDateTime时遇到的问题。您能否将提供的代码简化为更具体的代码,并提及哪一行抛出错误?还要检查开发和生产机器上的日期格式-确保它们使用相同的格式。这样,您的
    statusCellX
    单元格中就有了一个日期字符串。然后将其转换为
    DateTime
    3次,提取其中的一部分,以另一种格式将它们连接在一起,而不是首先调用
    .ToString(“yyy/MM/dd”)
    ?虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-如果你按照@Mikhail_Sam的建议去做,那么我将投票不删除@mikep。同意-已更新为与OP的问题相关的内容。我的评论队列中似乎没有这方面的内容,所以我希望so有一个机制来解决这一问题。答案看起来不错,谢谢。但是程序还是给了我这个错误。我不知道为什么。我试了很多,没有结果。谢谢。但是程序给了我这个错误。我不知道为什么。我试了很多次都没有结果。我的电脑和主机上的日期格式都是一样的。像这样:“yyy/dd/mm”我必须在波斯日历中显示日期。所以我必须使用这个代码。能否在TableCell statusCell1=e.Row.Cells[0]行之后放置断点并告诉statusCell1、statusCell2和statusCell3中的值;TableCell statusCell2=e.Row.Cells[1];TableCell statusCell3=e.Row.Cells[2];
                int year, month, day;
                year = Convert.ToInt32(pc.GetYear(Convert.ToDateTime(statusCell1.Text)));
                month = Convert.ToInt32(pc.GetMonth(Convert.ToDateTime(statusCell1.Text)));
                day = Convert.ToInt32(pc.GetDayOfMonth(Convert.ToDateTime(statusCell1.Text)));
                dstr = year.ToString() + "/" + month.ToString() + "/" + day.ToString();
                statusCell1.Text = dstr;