2014-12-14 9 views
1

내가 AM/PM, 의 2 개 문자 14 번호가 C#으로 날짜 시간에 14 수를 변환내가 dateTime에</p> 예를 들어 <p>로 변환 할

DateTime result = 
DateTime.ParseExact(dateString, "Mdyyyyhmmsstt", 
CultureInfo.CreateSpecificCulture("en-US")); 

출력 515201483742AM5 15 2014 8 37 42 AM

인 형식

에 오류가 17,451,515,

개월은 변경하지 않고 문자열을 구문 분석 할 수있는 방법이 없습니다 AM

+1

잘 모르겠지만 기존의 Try/Parse 메서드로 구문 분석 할 수는 없습니다. 또한 맞춤 구문 분석기는 여기에서 실제로 복잡 할 것입니다. 덜 모호한 입력 문자열을 요청할 수 있습니까? – Steve

+1

현재 날짜와 시간을 형식으로 제공해 주시겠습니까? 어떻게 생겼어? – Frank

+3

감히 말할 수 없습니다. 예 : "115"로 시작하는 문자열이 있다면 1 월 15 일인지 11 월 5 일인지를 알 수있는 방법이 없습니다. – Grx70

답변

0

에도 선두에 0

d 선두에 0

시간 같은과 ttM입니다 그것을 M format specifier 때문에 두 자릿수이고 한 달에 51을 구문 분석하도록 매핑됩니다. 그래서 귀하의 수술은 FormatException입니다. h format specifier과 동일합니다. 우리가 08 매핑합니다 05h 형식 지정자를 매핑합니다 M 형식 지정자를 제공하기 위해 515201483742AM에서 05152014083742AM에 문자열을 변경해야하는 이유

는 그입니다.

과 같은 방법을 사용할 수 있습니다.

public static DateTime? ParseDate_Mdyyyyhmmsstt(string date) 
{ 
    if (date == null) 
     return null; 
    if (date.Length < 14) 
     return null; 
    if (date.Length == 14) 
     date = date.Insert(0, "0").Insert(8, "0"); 
    DateTime dt; 
    if (DateTime.TryParseExact(date, "Mdyyyyhmmsstt", 
           CultureInfo.InvariantCulture, 
           DateTimeStyles.None, out dt)) 
     return dt; 
    return null; 
} 

var dt = ParseDate_Mdyyyyhmmsstt("515201483742AM"); 
Console.WriteLine(dt.Value); // 15.05.2014 08:37:42 

1 : 나는 이것이 우아한 해결책이 아니다 알고 있지만 당신의 달 및 시간 부분이 한 자리 숫자 일 때 당신의 경우에 작동합니다.

읽기 : DateTime conversion from string C#

+1

물론,이 특정 입력에 대해서는 작동하지만, 입력 "1215201483742AM"(이것은 15.12입니다.2014 08:37:52)'null'을 반환 할 것입니다 ... – Grx70

+0

@ Grx70 물론 "1215201483742AM".Length'는 "15"이기 때문에'null '을 반환합니다. 그래서 내가 네 말대로 ** **. 예를 들어, 문자열의 월 부분이'2' 자릿수이기 때문에 OP는'date.Insert (0, "0")'부분을 건너 뛸 수 있지만'Insert (8, "0")'부분을 추가해야합니다 시간 부분은 여전히 ​​'1'자릿수입니다. –

+0

네 말이 맞지만 길이 15의 입력이 주어지면'date.Insert (0, "0")'또는'.Insert (8, "0")'을 건너 뛸 지 여부를 어떻게 알 수 있겠는가? – Grx70

0

사용을 두 번 "MM"와 "DD"대신 하나의 "M"과 "D"는

DateTime result = DateTime.ParseExact(dateString,"MMddyyyyhmmsstt",CultureInfo.CreateSpecificCulture("en-US")); 

이 작동합니다.