格式日期时间问题的毫秒级与FileHelpers c#

本文关键字:FileHelpers 日期 时间 问题 格式 | 更新日期: 2023-09-27 18:14:10

我需要一个非常小的帮助来解析日期时间数据从csv文件的FileHelpers库使用c#应用程序。

我在csv文件中使用的日期时间数据为= 20160803T0509+0100

我得到的错误如下

ex = {"Error Converting '20160803T0509+0100' to type: 'DateTime'.  There are more chars in the Input String than in the Format string: 'yyyyMMdd HH:mm:ss'"}

我使用的代码如下

    [FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.NotAllow)]
                [FieldTrim(TrimMode.Both)]
                [FieldConverter(ConverterKind.Date, "yyyyMMdd HH:mm:ss")]
 private DateTime _ShipmentDateTime;
                public DateTime ShipmentDateTime
                {
                    get { return _ShipmentDateTime; }
                    set { _ShipmentDateTime = value; }
                }

格式日期时间问题的毫秒级与FileHelpers c#

你将不得不做一些字符串操作,因为DateTime.Parse()DateTimeOffset.Parse()不会理解:"20160803T0509+0100"

你需要找到"T"并删除它,计数2个字符并加上":",你还需要找到"+"并计数2个字符并加上":"。

你会得到这样的东西:"20160803 05:09 +01:00"。如果您知道csv文件中的格式为YYYYMMDD,请在相关位置添加"/",以获得: "2016/08/03 05:09 +01:00"

现在,DateTimeOffset.Parse()将理解这个字符串。

public DateTime ShipmentDateTime
 {
   get { return _ShipmentDateTime; }
   set { 
         var dateTimeOffset = DateTimeOffset.Parse(value); //value = "2016/08/03 05:09 +01:00"
         _ShipmentDateTime = dateTimeOffset.UtcDateTime; 
       }
 }

注:

你使用Datetime而不是DateTimeOffset有什么特别的原因吗?因为航运是多时区的,而DateTimeOffset通常更安全。您总是可以在稍后阶段转换为DateTime以用于显示目的,但至少您仍然有偏移有效数字

可以使用yyyyMMddTHHmmzzz的格式。zzz处理时区信息。您需要使用的完整属性是:

[FieldConverter(ConverterKind.Date, "yyyyMMddTHHmmzzz")]

文档指出"你可以在MSDN文档中找到DateTime的所有支持的格式字符串。ParseExact"这样你就可以用一个简单的应用程序(DotNetFiddle)证明上面的内容:

DateTime d = DateTime.ParseExact("20160803T0509+0100", "yyyyMMddTHHmmzzz", CultureInfo.CurrentCulture);
Console.WriteLine(d);
Console.WriteLine(d.ToString("yyyyMMddTHHmmzzz"));

产生(在我的英国系统中)

03/08/2016 05:09:00
20160803 t0509 + 01:00