2009-08-18 2 views
3

이것은 여러 번 발생하는 문제이며 내가 누락 된 우아한 해결책이 있다고 확신합니다.C# 날짜 형식화

저는 C#에서 문자열로 보내지는 다양한 SQL 테이블/웹 사이트/웹 서비스에서 보내는 DateTime 변수가 있습니다. 문제는 이러한 출처 중 일부는 영어 (미국)로 설정되고 일부는 영어 (영국)로 설정된다는 것입니다. 나는 그들 모두를 하나의 문화 또는 다른 문화에 맞추기를 좋아하기 때문에 이들 중 일부를 통제 할 수는 없습니다.

지금까지 나는이 그것을 형식으로은 CultureInfo 개체를 사용하여 변환 된 올바르게 좋아 :

CultureInfo ci = new CultureInfo("en-GB"); 
Convert.ToDateTime(inputDateTimeString, ci); 

그러나, 최근에 변환이 원래의 날짜 시간이 무엇인지 문화를 모르는 나에게 발생했습니다 (그것은 내가 말했듯이, 그것은 미국식이거나 영국인이 될 수 있습니다.) 그것은 단지 문자열이기 때문입니다.

날짜 문자열 (예 : "06/15/2009")의 경우 변환이 '15'가 해당 월이 될 수 없음을 인식하기 때문에 문제가되지 않습니다. 그러나 "06/07/2009"라는 날짜 문자열은 항상 유효하지만 원본이 미국인인지 영국인인지에 따라 다른 요일과 달을 나타낼 수 있습니다.

일반적으로 이러한 모호성을 줄이는 DateTime을 처리하는 더 나은 방법이 있습니까? 감사.

편집 : 내 정보가 제한되어 있으므로 올바른 형식으로 항상 변환 할 수있는 확실한 방법이없는 것 같습니다.

이러한 DateTime 문자열의 소스 중 하나는 제어 할 수없는 .dll입니다. 그러나이 .dll이 정보가 저장된 데이터베이스에 액세스하는 데 사용하는 SQL 로그인을 제어 할 수 있습니다. 이 로그인의 언어 설정을 영국 영어 (현재 미국 영어입니다)로 변경하려면 DateTime을 해당 형식으로 검색합니까, 그렇지 않습니까? 나는 그것이 다른 것을 망쳐 놓지 않았다는 것을 당연히 확인해야 할 것이다.

+0

프로그래머에게 이것은 두통의 원인입니다 ... –

+0

심지어 일 월 년은 때로는 고통입니다.년 월 일 시간 분 초가 가장 좋습니다 :) – MartW

답변

7

소스에서 문제를 해결해야합니다. 모호한 형식의 데이터가 제공됩니다. 데이터 소스 자체를 변경할 수없는 경우 형식 문자열이나 이와 유사한 형식으로 데이터 소스를 꾸며야하므로 전체 데이터 소스를 한 가지 방법으로 처리해야합니다.

해당 정보가 없으면 단순히 신뢰할 수있는 데이터를 구문 분석 할 수 없습니다.

+0

잘했다. 이 문제는 지원 데이터가없는 사실 이후에 이름 (처음, 마지막)을 나눠야한다는 사실을 상기시켜줍니다. 당신은 할 수 있지만 ... 그것은 신뢰할 수 없습니다. –

+2

모든 시스템 만 날짜 시간을 UTC 형식으로 처리하고 표시 시간 만 변환 한 경우. –

+1

@goap : 실제로 모든 문제를 해결하는 것은 아닙니다. 때로는 현지 시간 + 시간대를 알아야합니다. 예를 들어, 시간대를 모르면 "다음 주 같은 시간에"운동 할 수 없습니다. –

0

나는 보통이다 (모든 구문 분석에) 무엇을 : 실패하면 사용자의 문화를 사용

  1. TryParse
  2. , 문화를 이해하면 불변 플래그
+0

구문 분석에서 가져온 값을 사용하십시오 ... – mbillard

0

를 사용하여 구문 분석 귀하의 질문을 올바르게 그것은 약간의 통제 밖입니다 - 당신이 외부 소스에서 이러한 날짜를 얻는다면, 당신은 그들이 어떤 형식인지 알 필요가 있습니다. C#에서 DateTime 객체를 얻으면 초기 형식은 중요하지 않습니다. 형식에 관계없이 날짜와 시간.

다른 한편으로는 데이터베이스에서 일종의 날짜 형식 데이터베이스 형식으로 가져 오지 않는 이유는 무엇입니까?