c# - 日期字符串无法解析为有效的日期时间

标签 c# .net string parsing datetime

我的应用程序中有以下代码可以从 xml 文件中读取日期时间:

private void getConfig()
    {
    XDocument xdocument = XDocument.Load(@"C:\Salesforce\SFDIAuto\config.xml");
    IEnumerable<XElement> tasks = xdocument.Elements();
    foreach (var task in tasks)
        {
       IEnumerable<XElement> query = task.Elements("Triggers").Elements("CalendarTrigger");
       foreach (XElement result in query)
           {            
            CalendarTrigger[0] = (result.Element("Next").Value != "") ? Convert.ToDateTime(result.Element("Next").Value).ToString("MM/dd/yyyy HH:mm:ss") :
                    DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss");
            dScanDate.Value = Convert.ToDateTime(CalendarTrigger[0]);
            dScanTime.Value = Convert.ToDateTime(CalendarTrigger[0]);

            CalendarTrigger[1] = (result.Element("Last").Value != "") ? Convert.ToDateTime(result.Element("Last").Value).ToString("dd/MM/yyyy HH:mm:ss") : "";
            CalendarTrigger[2] = result.Element("Result").Value;
            CalendarTrigger[3] = "Ready";
            if (Convert.ToDateTime(result.Element("Next").Value) < DateTime.Now)
                    CalendarTrigger[3] = "Missed/Overdue";

                CalendarTrigger[4] = result.Element("ScheduleByDay").Element("DaysInterval").Value;

xml配置文件格式如下:

<?xml version="1.0" encoding="utf-8"?>
<config>
    <Triggers>
        <CalendarTrigger>
            <Start>2012-07-02T18:00:00</Start>
            <Next>2013-11-13T21:00:00</Next>
            <Last>2013-11-12T21:00:00</Last>
            <Result>Success</Result>
            <Enabled>true</Enabled>
            <ScheduleByDay>
                <DaysInterval>1</DaysInterval>
            </ScheduleByDay>
       </CalendarTrigger>
    </Triggers>

在我的开发 PC 上,没有错误,但在实时服务器上,这个过程总是抛出错误:

String was not recognized as a valid DateTime.

它正在查看的值是:

CalendarTrigger[0] = "11/13/2013 21:00:00"

看到它在我的开发电脑上运行良好,我应该怎么做才能找出环境中的不同之处,以及我如何重新编码这部分才能在任何地方工作?

最佳答案

问题出在特定的机器文化中。 Convert.ToDateTime将使用系统定义的区域性解析字符串。对于一个系统,11/13/2013 将是一个有效日期,但对于另一个系统(例如乌克兰语,月份应该排在第二位:))它不是并且有效应该是 13/11/2013.

当您在字符串中存储数字/日期/区域设置特定数据时,您应该始终考虑客户文化。为了让事情更清楚,我建议你使用 InvarianCulture用于存储/转换文化特定数据。

存储在字符串字段中的不变日期示例:

var invariantStringDate = DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture.DateTim‌​‌​eFormat);

关于c# - 日期字符串无法解析为有效的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19952799/

相关文章:

c# - 带有字形信息的字体渲染

c# - 50级灰度

c# - 如何以编程方式阅读 C# 中 WSDL 的文档部分

Python 正则表达式 - 扩展字符串

c# - 将 (0/1) 字符串加载到位数组中

java - 使用自定义正则表达式java分割字符串

c# - 嵌套在 GridView 中的 Databound 转发器不会更新

c# - 需要帮助来保护 ASP.NET Web 应用程序

c# - 正则表达式 - 删除表达式内的零

带有枚举数组的 C# 反射