2012-01-09 2 views
0

C# 응용 프로그램은 MySQL 데이터베이스에서 일부 날짜를 읽어야합니다. 문제는 시스템의 현지화 설정에 따라 날짜 형식이 달라진다는 것입니다.C#에서 날짜를 얻는 방법, 현지화하지 않고

현지화 설정에 관계없이 항상 yyyy-MM-ddhh : mm : ss 및 yyyy-MM-dd 형식의 데이터를 얻을 수 있는지 질문하는 것이 좋습니다.

미리 감사드립니다.

+1

MySQL의 날짜를 나타내는 열의 데이터 형식은 무엇입니까? – dasblinkenlight

+0

날짜와 datetime (여러 필드에서 둘 다 사용함) – user198003

+0

당신이 말하는 것을 보여줄 수있는 코드 예제를 제공해 주시겠습니까?나는 당신이 MySQL과의 통신에 대해 이야기하고 있는지 또는 datetime을 데이터베이스에서 읽고 사용자에게 보여주고 싶은지 확실하지 않습니다. –

답변

2

날짜를 실제 날짜 또는 날짜 시간 값으로 저장하는 경우 응용 프로그램은 원시 이진 데이터를 다시 가져 오며 날짜 값의 문자열 표현을 만들 때까지 지역화되지 않습니다. 내 생각 엔 디버거의 값을보고 있거나 현재 로케일을 사용할 Console.WriteLine(theValue);을 사용하고있는 것 같습니다. 문자열이 아닌 값을 문자열로 변환 할 때는 항상 원하는 형식 및/또는 원하는 문화권을 포함하십시오.

날짜를 문자열로 저장하는 경우 데이터베이스에 들어간 형식을 정확히 알아야합니다. 있는 그대로 그냥 값을 처리하고 사용자에게 보여 주어야 할 때까지 문자열로 변환하지 않습니다 : 날짜를 가정

date 또는 datetime로 저장됩니다

DateTime theValue = theReader.GetDateTime(fieldOrdinal); 
var theValueAsText = theValue.ToString(CultureInfo.InvariantCulture); 
var specificTextRepr = theValue.ToString("yyyy-MM-dd HH:mm:ss"); 

theValueAsText 변수 특정 문화에 묶이지 않은 문자열 표현입니다. specificTextRepr은 귀하의 특정 텍스트 표현입니다. 당신은 날짜와 날짜/시간 특정 표현의 날짜를 저장하기 때문에

3

당신은 데이터베이스에서 문자열로 다시 읽는해서는 안 - 당신이 데이터를 읽는 방법이 표시하지 않은,하지만 당신이 뭔가를 사용하는 경우 다음 DataTable, 또는 LINQ, 또는 IDataReader.GetDateTime을 채울 문자열 포맷팅이 필요하지 않습니다 (데이터베이스에 올바르게 저장되어 있다고 가정합니다). 당신이 문제를 변환 것과를 선택 방법, 당신은 거의 항상 포맷하지 않는 일을 피해야한다 -

DateTime 값이 형식을이없는 본질적으로 않습니다 int보다 더 진수 또는 16 진수에 당신은 정말로 필요합니다.

0

당신은

date_format(dob,'%d/%m/%Y')

select date_format(dob,'%d/%m/%Y') dob from student where Id=1 
2

를 사용하여 쿼리에서 직접 날짜를 포맷 할 수 있습니다, 서식 (전혀 그것으로 재생되지 않습니다 날짜/시간이 문자열로 저장 될 때, 포맷팅이 중요 할 때, 그러나 잘못된 이유 때문에) 매우 낙심 한 저장 방식과 반대되는 것입니다.

C# 코드에서 MySQL을 쿼리하면 로캘에 관계없이 올바른 날짜를 얻을 수 있습니다. 로케일에 따라 으로 다르게 표시되지만 은 로케일 설정에 관계없이을 나타냅니다.

관련 문제