我的应用程序中有以下代码可以从 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.DateTimeFormat);
关于c# - 日期字符串无法解析为有效的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19952799/