DateTime에서 false를 반환하지 않고 DateTime으로 인식되는 10 진수 값입니다.


9

날짜 또는 십진수인지 여부를 문자열 값을 기준으로 확인해야하지만 날짜 구문 분석은 항상 십진수에 대해 true를 반환합니다.

string val = "3.5";
DateTime oDate = DateTime.Parse(val);

유효한 날짜를 반환합니다 3/5/2019.

날짜 형식을 알 수없는 경우 유효한 날짜를 알기 위해 문자열을 확인하는 방법은 무엇입니까?


6
소수를 먼저 확인 하시겠습니까? 또는 DateTime.ParseExact어떤 형식을 취할 수 있는지 알고 있다면 사용 하십시오
— A Friend

3
TryParseExact유효한 날짜 형식을 사용 하고 지정할 수 있습니다 .
— juharr

5
실제로- DateTime.Parse여러 패턴을 시도합니다. 특정 것만 인식하려면 구체적으로 구문 분석하십시오.
— Jon Skeet

1
이것이 귀하의 질문에 대답합니까? DateTime.TryParse
— Joost K

답변:


3

"유효한 날짜를 알기 위해 문자열의 유효성을 검사하는 방법은 무엇입니까?"

문제는 유효한 날짜 (및 소수점) "3.5" 로 간주됩니다.

당신은 항상에 소수점 유형을 원하는 경우 (즉, 당신은 원하지 않는다 "승리" isDate와 isDecimal모두가 되실 true), 유효성 검사에서 소수 검사를 포함한다.

이를 수행하는 한 가지 방법 은 문자열을 유형으로 구문 분석 할 수 있고 매개 변수를 변환 된 값으로 설정하는 TryParse메소드 를 사용하여 bool문자열을 유형 out으로 변환 할 수 있는지 여부를 판별하는 것입니다.

string val = "3.5";

// temp variables to hold parsed values
DateTime tmpDate;
decimal tmpDec;
int tmpInt;

var isDecimal = decimal.TryParse(val, out tmpDec);
var isInteger = int.TryParse(val, out tmpInt);

// When checking if it's a DateTime, make sure it's not also a decimal
var isDate = !isDecimal && DateTime.TryParse(val, out tmpDate);

나는 이미 시도했지만 3.5는 유효한 날짜와 유효한 소수이므로 전혀 도움이되지 않습니다.
— Munawar

1
위의 코드에서, isDate인 false은 수표를 포함하기 때문에 isDecimal. 그게 당신이 요구 한 것이 아닙니까?
— Rufus L

2
@Munawar- "3.5는 유효한 날짜와 유효한 십진수"입니다. 인간으로서 우리에게 그 문자열이 제시되고 다른 문맥이 없다면, 그것이 날짜인지, 소수인지 또는 다른 것이 될 수 있는지 알 수 없습니다 . 컴퓨터가 마술처럼 대답 할 것이라고 기대할 수는 없습니다.
— Damien_The_Unbeliever

예,이 답변은 문제에만 해당되며 형식을 알면 ParseExact가 가장 적합하지만 내 문제를 해결합니다.
— Munawar

날짜 형식이 "12122019"인 경우 당신은 문제가 STIL
— 아타나시오 Kataras

6

ParseExact 의 공식 문서를 확인하십시오.

정확한 표현을 알고 있다면 다음과 같이 할 수 있습니다.

  format = "ddd dd MMM yyyy h:mm tt zzz";
  try {
     result = DateTime.ParseExact(dateString, format, provider);
     Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
  }
  catch (FormatException) {
     Console.WriteLine("{0} is not in the correct format.", dateString);
  }

당신이 그것을 모른다면, 당신은 문화적 탐욕에 갇혀 있습니다

특정 문화권의 규칙을 사용하여 날짜 및 시간 문자열을 구문 분석하십시오. 구문 분석 (문자열, IFormatProvider) 과부하 (구문 분석 및 문화 규약 참조)


형식은 알려져 있지 않으며 사용자 기본 설정을 기반으로 할 수 있습니다.
— Munawar

1
@Munawar 그 상황에서 2019 년 3 월 1 일과 2019 년 3 월 1 일을 어떻게 구분할 수 있습니까?
— Blaise

@Athanasios, 응용 프로그램은 암호화 된 다른 지역 및 날짜에 사용됩니다. 왜냐하면 형식이 알려진 경우 ParseExact가 가장 적합하지만 사용자는 날짜 형식을 변경할 수 있으므로 특정 형식을 적용하는 것을 망칠 필요가 없습니다.
— Munawar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.