Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文化日期时间变化_C#_Vsto - Fatal编程技术网

C# 文化日期时间变化

C# 文化日期时间变化,c#,vsto,C#,Vsto,我有一个VSTO应用程序,可以执行邮件合并和其他操作 邮件合并数据库是一个Excel数据库,有一些DateTime字段存储为(dd/MM/YYYY)(例如,2012年4月29日)。我的问题是,在Excel中日期看起来不错,但在Word中它以其他格式显示(MM/dd/yyyy)(例如2012年4月29日)。当尝试在我的VSTO应用程序上获取此日期时,它会抛出一个转换错误,表明字符串的格式错误 所有这些都发生在同一台机器上。如果我将VSTO中的文化信息更改为en US,则效果良好 // This w

我有一个VSTO应用程序,可以执行邮件合并和其他操作

邮件合并数据库是一个Excel数据库,有一些
DateTime
字段存储为(dd/MM/YYYY)(例如,2012年4月29日)。我的问题是,在Excel中日期看起来不错,但在Word中它以其他格式显示(MM/dd/yyyy)(例如2012年4月29日)。当尝试在我的VSTO应用程序上获取此日期时,它会抛出一个转换错误,表明字符串的格式错误

所有这些都发生在同一台机器上。如果我将VSTO中的文化信息更改为en US,则效果良好

// This way fails 
edictoActual.FechaEdicto = Convert.ToDateTime(fields(fieldFechaEdicto).value); 

// This way Works
IFormatProvider Formato = new System.Globalization.CultureInfo("en-US", true);
edictoActual.FechaEdicto = Convert.ToDateTime(fields(fieldFechaEdicto).value,Formato); 

为什么会这样

你能
format
你想要的预期输出的日期吗?不,日期以字符串字段(fieldFechaEdicto)的形式出现在我的面前。它存储在mailmerge数据源中。Juan我将发布一个示例,你可以使用一个简单的switch语句来确定如何做到这一点。。基于此示例,您应该能够看到我正在尝试的内容,并且您可以根据自己的意愿添加到示例中。您可以关注代码中的
案例10:
,这是我多次编写和使用的内容,因为在处理传入数据时,某些数据始终不会以10位数的日期格式出现。。希望这个例子能给你一个想法。。此外,在代码中,您还可以编写自己的方法来解析/构建子字符串以传回正确的日期格式。。选择是无止境的。你怎么知道
“02/03/2012”
是指3月2日还是2月3日?非常感谢你的帮助,似乎一定要使用文化。Tks一个LotDo Word和Excel有不同的默认区域性,如果没有提供,则会接管它们?Tks Ryan。真的不明白注释上面的代码不是很有用,因为格式
“M/d/yyyy”
即使月号和/或日期号有两位数字也可以使用。还有,为什么要使用“英语(美国)”文化?该应用程序是否针对美国讲英语的人。?我建议使用
CultureInfo.InvariantCulture
,它具有以下特点:(1)使用
gregorianalendar
。(2) 使用字符串
“/”
(斜杠)作为
日期分隔符
。Jeepe该代码在
m/d/yyyy
中不是他的问题的一部分,但是如果您查看根据
Case
语句格式化的日期,该代码将起作用。。你会看到它会起作用的。。并非每个人都能以传统的
mm/dd/yyyy
格式获得
Dates
,我们在
美国文化中看到这种格式
我发布了答案,为OP提供了一种额外的选项/方式,可以根据日期格式修复代码。。创造性思考
string DateString = "29/04/2012"; //DateString needs to be replaced with your fields value as a string
var dateLength = DateString.Length;
IFormatProvider culture = new CultureInfo("en-US", true);
DateTime dateVal;
switch (dateLength)
{
     case 8:
        {
          dateVal = DateTime.ParseExact(DateString, "M/d/yyyy", culture);
            break;
        }
    case 9:
        {
            // he you can add your own additional if(){} condition to check if date value Day has a length of 2 
            // if so then you know that the date is in m/dd/yyyy format
            // otherwise you know it's in mm/d/yyyy but 
            dateVal = DateTime.ParseExact(DateString, "M/dd/yyyy", culture);
            break;
        }
    case 10:
        {
            dateVal = DateTime.ParseExact(DateString, "MM/dd/yyyy", culture);
            //or change the above to look like the following 
            //dateVal = DateTime.ParseExact(DateString, "dd/MM/yyyy", culture);
            break;
        }

}