2016-09-29 6 views
0

여러 언어로 된 응용 프로그램이 있습니다. 저는 미국 표준을 브라질에서 사용하는 표준으로 변환하는 데 문제가 있습니다. 저는 이것을 사용하고 있습니다.시간 초과 값이 잘못되었습니다.

DateTime dataCredito = DateTime.Parse(txtDtCredito.Text); 
if (Culture == "English (United States)") 
{ 
    string dataConvertida = dataCredito.ToString("dd/MM/yyyy"); 
    dataCredito = Convert.ToDateTime(dataConvertida); 
} 

하지만 시간 범위를 계산 한 후

TimeSpan ts = dataNota - dataCredito; 

dataNota는 2016년 9월 10일 및 dataCredito이 2016년 5월 10일

그것은 4 일의 차이, 그러나입니다 timespan은 월이 05와 09이므로이 방법은 미국 표준을 사용하여 약 123 일입니다.

시간대를 올바르게 변경하려면 어떻게해야합니까? (이 경우 4 일간)?

+3

왜이 작업을 수행해야합니까? '''string dataConvertida = dataCredito.ToString ("dd/MM/yyyy"); dataCredito = Convert.ToDateTime (dataConvertida);'''이것은 의미가 아닙니다. – tym32167

+3

문제는 'TimeSpan'과는 달리 문자열을 'DateTime'으로 구문 분석 할 때 발생합니다. – juharr

+0

앱의 기본 문화권은 무엇입니까? 왜냐하면 당신은'DateTime.Parse'가 사용해야하는 문화를 알려주지 않고 날짜를 파싱하기 때문입니다. –

답변

-3

I이 문제를 해결하기 위해 관리했습니다.

난 그냥 지금 시간 범위는 올바른 4.

if (Culture == "English (United States)") 
        { 
         string dataAmericana = dataCredito.ToString("dd/MM/yyyy"); 
         dataCredito = Convert.ToDateTime(dataAmericana); 
         string dataNotaNova = dataNota.ToString("dd/MM/yyyy"); 
         dataNota = Convert.ToDateTime(dataNotaNova); 
        } 
        TimeSpan ts = dataNota - dataCredito; 
+0

그건 말도 안돼. 날짜를 문자열로 다시 변환하여 얻은 것은 없습니다. 날짜 형식이 없습니다. 마우스를 사용하여 선회 전후에 'dataCredito'를 검사하면 같은 값을 볼 수 있습니다. – Plutonix

+0

이 경우 작동하지 않는 이유는 무엇입니까? dataCredito는 05/10/2016이며,이 변환 후에 10/05/2016이됩니다. 이것은 질문에서 묻는 것입니다. –

1

문제는 당신이 DateTime 개체에 텍스트를 변환하는 방식입니다 반환하고, 시간 범위 전에이 작업을 추가 할 수 있습니다. 분명히

DateTime dataCredito = DateTime.ParseExact("09/10/2016","dd/MM/yyyy",CultureInfo.InvariantCulture); 

는 "09를 교체해야합니다 : 당신은 암시 적으로 명시 적으로이 형식이 방법을 언급해야 할 때 변환이 자신의 로케일을 기반으로 할 수 - 방법을 통지하지 않음으로써, 당신은 어떻게 그것을 변환하려면/10/2016 "을 입력해야합니다. 단 하나의 숫자에 대한 지원이 필요한 경우"d/M/yyyy "형식을 사용하십시오.

1

DateTime을 올바르게 구문 분석하려면 DateTime.Parse(String, IFormatProvider) 과부하 DateTime.Parse()을 사용해야합니다.

문화권 별 표현으로 다른 데이터 형식을 구문 분석하려는 경우에도 마찬가지입니다.

관련 문제