Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# FieldConverter ConverterKind.Date“;年月日;例外_C#_.net_Datetime_Csv_Filehelpers - Fatal编程技术网

C# FieldConverter ConverterKind.Date“;年月日;例外

C# FieldConverter ConverterKind.Date“;年月日;例外,c#,.net,datetime,csv,filehelpers,C#,.net,Datetime,Csv,Filehelpers,我尝试读取csv文件。 我的第五张唱片日期:2008年11月3日 这是我的一段代码: [FieldConverter(ConverterKind.Date, "dd/MM/yyyy")] public DateTime datum_5; 我的代码在以下方面崩溃: Result[] results= (Result[])engine.ReadFile(@"..\Data\expo.txt"); 除此之外: 行:1。专栏:41。字段:基准5。将“03/11/2008”转换为类型“

我尝试读取csv文件。 我的第五张唱片日期:2008年11月3日

这是我的一段代码:

    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy")]
    public DateTime datum_5;
我的代码在以下方面崩溃:

Result[] results= (Result[])engine.ReadFile(@"..\Data\expo.txt");
除此之外: 行:1。专栏:41。字段:基准5。将“03/11/2008”转换为类型“DateTime”时出错。使用格式:“dd/MM/yyyy”

当我这样做时:

[FieldConverter(typeof(ConvertDate))]

        public DateTime datum_5;
为此:

internal class ConvertDate : ConverterBase
   {

       /// <summary>
       /// different forms for date separator : . or / or space
       /// </summary>
       /// <param name="from">the string format of date - first the day</param>
       /// <returns></returns>

       public override object StringToField(string from)
       {
           DateTime dt;

           if (DateTime.TryParseExact(from, "dd.MM.yyyy", null, DateTimeStyles.None, out dt))
               return dt;

           if (DateTime.TryParseExact(from, "dd/MM/yyyy", null, DateTimeStyles.None, out dt))
               return dt;

           if (DateTime.TryParseExact(from, "dd MM yyyy", null, DateTimeStyles.None, out dt))
               return dt;

           throw new ArgumentException("can not make a date from " + from, "from");

       }
   }
内部类ConvertDate:ConverterBase
{
/// 
///日期分隔符:。或/或空格的不同形式
/// 
///日期的字符串格式-第一天
/// 
公共覆盖对象StringToField(字符串来自)
{
日期时间dt;
if(DateTime.TryParseExact(从“dd.MM.yyyy”开始),null,datetimestyle.None,out dt))
返回dt;
if(DateTime.TryParseExact(从“dd/MM/yyyy”开始),null,datetimestyle.None,out dt))
返回dt;
if(DateTime.TryParseExact(从“dd-MM-yyyy”开始),null,datetimestyle.None,out-dt))
返回dt;
抛出新的ArgumentException(“无法从“+从”,“从”)创建日期);
}
}
我得到了一个例外:无法从2008年11月3日起确定日期 参数aam:从


我做错了什么?

尝试时会发生什么:

DateTime.TryParseExact(from, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);

失败的原因是/在自定义日期格式字符串中为

您正在为
IFormatProvider
参数指定
null
,因此它使用的是当前区域性,该区域性可能具有除/以外的日期分隔符

最好的解决方案是显式指定CultureInfo.InvariantCulture(下面的第二个版本)。对自定义日期格式字符串中的“/”进行转义,以便将其视为文字斜杠而不是日期分隔符也可以(下面的第一个版本)

// Set current culture to a culture that uses "." as DateSeparator
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
// This will work - escaping means it uses a literal / as the separator
DateTime.TryParseExact(s, @"dd\/MM\/yyyy", null, DateTimeStyles.None, out result);

// This is better - Culture.InvariantCulture uses / for the DateTimeFormatInfo.DateSeparator
// and you clearly express the intent to use the invariant culture
DateTime.TryParseExact(s, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out result);

// This will fail - / means use DateTimeFormatInfo.DateSeparator which is "." in the de-DE culture
DateTime.TryParseExact(s, "dd/MM/yyyy", null, DateTimeStyles.None, out result);