2016-10-20 4 views
1

C# 응용 프로그램을 사용하여 FileHelpers Library에서 csv 파일의 날짜 시간 데이터를 구문 분석하는 데 아주 작은 도움이 필요합니다.FileHelpers에서 Millisecond 형식의 DateTime 문제 C#

+ 0100

20160803T0509가 나는 아래와 같은 코드를 사용하고

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'"} 

아래와 같은 오류를 얻고있다 = 나는이 CSV 파일에 사용한 날짜 시간 데이터

[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; } 
       } 
+0

는 '형식의 문자열로' "YYYYMMDD # HHMM #####"를 사용하여 시도 적이 있습니까? – Oliver

+0

이 문제는 @ usheeltyagi 해결 되었습니까? – petelids

답변

0

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; 
     } 
} 

사이드 참고 :

당신이 운송으로하는 DateTimeOffset을 통해 날짜 시간을 사용하는 특별한 이유가 다중 시간대이며, DateTimeOffset으로 작업하기 일반적으로 안전합니다. 당신은 항상 표시 목적을 위해 나중 단계에서 DateTime으로 변환 할 수 있지만 적어도 여전히 유효 숫자가 있습니다.

0

yyyyMMddTHHmmzzz 형식을 사용할 수 있습니다. zzz은 시간대 정보를 처리합니다. 당신이 사용할 필요가 전체 속성이있다 : "당신은 DateTime.ParseExact에 대한 MSDN의 문서에있는 모든 지원되는 형식 문자열을 찾을 수 "고

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

documentation 상태 간단한 응용 프로그램과 함께 위의 내용을 입증 할 수 있도록 (DotNetFiddle)) 내 영국 시스템 (

2016년 3월 8일 5시 9분 0초 012,380,073 생산

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

20160803T0509 + 01 : 00