2011-05-05 3 views
5

나는 datetime을 문자열과 역으로 변환하려고 시도하지만 모든 문화권에서 작동하도록하려고 노력한다.DateTime을 현재 문화권과 독립적으로 만드는 방법은 무엇입니까?

기본적으로 TextBox (tbDateTime) 및 레이블 (lbDateTime)이 있습니다. 레이블은 사용자에게 소프트웨어가 tbDateTime의 입력을 예상하는 형식을 알려줍니다. Textbox의 입력은 MySQL 명령에 사용됩니다.

현재는 다음과 같이 작동

lbDateTime.Text = "DD.MM.YYYY hh:mm:ss"; // I live in germany 
DateTime date = Convert.ToDateTime(tbDateTime.Text); 
String filter = date.ToString("yyyy-MM-dd HH:mm:ss"); 

이제 내 질문 :

  • 는 현재 문화를 기반으로 lbDateTime.Text의 형식 문자열을 판단 할 수 있습니까?
  • Convert.ToDateTime 함수는 어떤 형식을 사용합니까?

도와 주시면 감사하겠습니다. 나는 실제로 다른 문화를 테스트하기 위해 여기에 PC가 없으므로, 나는 잘못된 것을 만들 것을 두려워합니다.

답변

5

Convert.ToDateTime 메서드를 사용하는 대신 DateTime.Parse 또는 DateTime.ParseExact 메서드를 사용할 수 있습니다. 둘 다 당신이 날짜를 형식화 할 것으로 예상하는 문화를 전달할 수 있습니다.

또한 DateTime.ParseExact 메서드를 사용하면 원하는 형식을 지정할 수 있으므로이 방법으로 어느 형식이든 구문 분석 할 수 있습니다.

편집 :
Convert.ToDateTime에 대해서. 설명서에는 구문 분석시 현재 문화권이 사용됩니다. http://msdn.microsoft.com/en-us/library/xhz1w05e.aspx

현재 문화권은 System.Threading.Thread.CurrentThread.CurrentCulture 속성을 사용하여 찾을 수 있습니다.

편집 2 :
오. 지정된 형식이 유효하지 않은지 확실하지 않은 경우 DateTime.TryParseDateTime.TryParseExact을 사용할 수도 있습니다.

EDIT3 : 여기에 편집의
많이 ... 난 당신이 사용자가 입력 한 날짜와 일치하는 문화 문자열을 결정하고자하는 것을 알 수있다. 여기서 일할 수있는 일반적인 해결책은 없습니다. 예를 들어 사용자가 01.02.11 날짜를 입력했다고 가정 해보십시오. 이 날짜가 day.month.year 또는 month.day.year 또는 year.month.day에있는 지 여부는 확실하지 않습니다.

당신이 할 수있는 최선의 방법은 예상되는 입력 문화 목록을 가지고 가장 가능성있는 것으로 시작하여 그것을 사용하여 날짜를 분석하는 것입니다. 그래도 실패하면 두 번째로 시도해 볼 수 있습니다.

하지만 실제로는 권장하지 않습니다. 사용자에게 예상 형식을 제공하거나 더 나은 방법으로 선택한 날짜가 적절한 형식으로 수신되도록하는 날짜 입력 상자를 사용하십시오.

5

Convert.ToDateTime 메서드는 DateTime.Parse을 호출하여 현재 문화권 (CultureInfo.Current)을 사용하여 문자열을 구문 분석합니다.

문자열을 구문 분석 할 때 문화권을 지정할 수 있습니다.예 :

DateTime data = DateTime.Parse(tbDateTime.Text, new CultureInfo("en-GB")); 

사용자 지정 날짜 형식을 사용하여 문자열을 구문 분석하는 DateTime.ParseExact (또는 DateTime.TryParseExact)를 사용할 수 있습니다. 예 :

DateTime data = DateTime.ParseExact(tbDateTime.Text, "dd'.'MM'.'yyyy HH':'mm':'ss", CultureInfo.InvariantCulture); 
+0

DateTime.Parse이 오류를 던지고있다. "문자열이 유효한 DateTime으로 인식되지 않았습니다." 이걸 없애는 방법? 이견있는 사람? –

0

또 다른 해결책 아랍어 일부터 EN-US 날짜로 변환 할 때

// Specify the current language (used in the current system you are working on) 
CultureInfo currentCulture = CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.ToString()); 
// Specify the language that we need 
CultureInfo myLanguage = CultureInfo.GetCultureInfo("en-US"); 

// Adapt the DateTime here, we will use the current time for this example 
DateTime currentDate = DateTime.Now; 
// The date in the format that we need 
string myDate = DateTime.Parse(currentDate.ToString(), currentCulture).ToString(myLanguage); 
관련 문제