2011-01-21 3 views
1

나는 많은 하위 응용 프로그램 compsed 글로벌 응용 프로그램이 있습니다.NET - 응용 프로그램 수준에서 시간대를 정의

  • 웹 사이트
  • Windows 서비스

내가 그 "응용 프로그램 부분을 파견 할 "많은 서버에서. 내 문제는 : 정확한 날짜를 원합니다. 이벤트가 태평양 표준시로 오후 6시에 저장되는 경우 유럽 사용자가 보드에서 "오후 6시"를 보지 못하도록합니다.

나는 =>하지만 I 수 없습니다 변화에 너무 많은 작업을 나타내는 각각의 단일 날짜가 저장되는 방법을, ("당신은 당신의 날짜 그런 식으로 저장해야합니다"라고 글을 많이 읽었습니다 예, 저장되는 datetime이며 날짜 오프셋은 아닙니다.

나는 서버에서 시간대를 변경하라는 다른 기사를 읽었지만, 나는 그 서버를 다른 사람들이 사용할 수 있기 때문에 할 수 없다.

좋은 소식은 응용 프로그램에서 날짜가 항상 정의되고 은 데이터베이스에 의해이 생성되지 않는다는 것입니다.

결과적으로 응용 프로그램 수준에서 시간 범위를 정의하려면 입니다. 그래서 그들이 어디에 있든, 내 응용 프로그램은 항상 동일한 시간대로 작동합니다. 남은 유일한 단계는 현재 사용자의 시간대 (모든 날짜가 동일한 지역화 된 날짜 시간 변환 방법을 통과하므로 매우 간단)에서 UI 수준의 날짜를 변환하는 것입니다.

오류가 발생하기 때문에 응용 프로그램 개발자가 작동하는 방식을 변경하는 것은 정말 여유가 없습니다. 그들은 변환을 생각하지 않고 DateTime.Now를 계속 사용해야합니다.

내가 사용하는 정확한 기술은 여기 관련이 없습니다. 문제는 글로벌 .Net입니다. 당신의 도움이


편집에 대한

감사 :의 내 문제는 바로 UTC 날짜를 반환DateTime.Now을하는 것입니다 가정 해 봅시다. 그럴 수있는 방법이 있습니까?

+0

'app.config'를 사용할 수 없습니까? 여기에 실제 질문이 있습니까? – bzlm

+2

그래서 당신이 말하는 것은 "올바른 방법으로 일할 시간이 없으며 잘못된 코드를 유지하면서 올바른 대답을 얻고 싶습니다." 정확하게 들리는가? –

+0

오류 발생 가능성이 있습니까? 모든 것을 UTC로 저장하고 검색하십시오. 그게 유일한 해결책이라고 생각합니다. – hometoast

답변

1

항상 UTC로 저장하십시오.

DateTime.UtcNow 

그런 다음 클라이언트에서 TZ 정정을 처리하십시오.

편집 : DateTime.Now를 변경하지 않는다는 중요한 부분을 놓쳤습니다. 프로그래머가 올바르게 처리하도록하십시오. 오류가 덜 발생합니다.

모든 클라이언트 코드에서 DateTime.UtcNow를 사용하거나 모든 클라이언트 코드에서 데이터베이스를 사용하여 타임 스탬프를 가져와야합니다. 어느 쪽이든 -해야 할 일이 있습니다.

행운을 빌어 요!

저장 서버의 로컬 응용 프로그램의 시간대 :

+0

DateTime.Now를 사용하는 많은 프로그래머에게 DateTime.Now를 사용하는 모든 시간 (그리고 때로는 몇 주 동안 프리랜서 개발자를 여기에서 변화시키는)의 프로그래머에게 묻습니다. a.날짜를 얻는 표준 표준 방법은 오류가 발생하기 쉽습니다. 모든 프로젝트에서 문제를 수정하기 위해 코드를 항상 검토해야합니다. – Mose

+0

그럼 두 가지 방법 만 있습니다. 그리고 두 가지 방법은 많은 것을 변화시키는 것입니다. 또는 모든 클라이언트 컴퓨터에 UTC 시간대를 설정하도록 강요합니다 (그리고 약속을 지키려고기도합니다. 코드를 확인하지 않으면 변경하지 않으면 알 수 없습니다). – hometoast

0

나는 대답은이 간단한 경우, 나는 아마도 질문을 오해하고있어 그 이해와 함께, 당신에게 간단한 대답을 줄거야. 그런 다음 현지 시간을 변환 할 수 있습니다. 로컬 개발자가 DateTime.Now를 사용하고 있다면 데이터베이스의 어느 곳에서나 DateTime.Now의이 값이이 시간대에 맞게 조정되었다고 말할 수 있습니다.

나야, 아니면 내가 무엇인가 내려다 보는거야?

+0

솔루션은 수백만 줄의 코드를 변경하는 것을 의미합니다. ^^ 모든 날짜가 저장되는 방식을 변경해야하기 때문에. 그리고 이것은 내가 풀고 싶은 문제입니다 ... – Mose

+0

@ 모스 : 예, 당신이 오랫동안 일을 못하게했을 때, 잠시 시간이 걸릴 수 있습니다 - 이것이 중요한 이유입니다 할 수있는 한 빨리 일을하는 깨진 방법을 사용하여 * 멈추십시오. –

0

옵션 : 모든 Datetimes를 GMT/UTC로 저장 한 다음 사용자 (브라우저)의 자바 스크립트를 통해 시간대를 가져 와서 해당 시간대를 고려한 날짜를 표시하십시오.

// Gets the Browsers timezone offset in minutes 
function getClientTimezoneOffsetInMinutes() 
{ 
    var rightNow = new Date(); 
    var date1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0); 
    var date2 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0); 
    var temp = date1.toGMTString(); 
    var date3 = new Date(temp.substring(0, temp.lastIndexOf(" ") - 1)); 
    var temp = date2.toGMTString(); 
    var date4 = new Date(temp.substring(0, temp.lastIndexOf(" ") - 1)); 
    var hoursDiffStdTime = (date1 - date3)/(1000 * 60 * 60); 
    var hoursDiffDaylightTime = (date2 - date4)/(1000 * 60 * 60); 
    return hoursDiffStdTime; 
} 
+0

나는 당신이 오해했다고 생각한다 : 문제는 인터페이스 수준이 아니며 애플리케이션 수준이다. 홍콩에서 오후 6시에 로그를 만드는 Windows 서비스가 있다고 가정 해 보겠습니다. 해당 로그는 오후 6시에 프랑스의 다른 Windows 서비스에서 사용됩니다. 데이터베이스에 저장해야하는 것은 UTC 날짜입니다. 자바 스크립트가 도움이되지 않습니다 – Mose

+0

네, 언급했듯이 GMT/UTC의 모든 날짜를 저장합니다. 자바 스크립트를 사용하면 사용자의 시간대를 알 수 있으므로 날짜를 올바르게 표시 할 수 있습니다 (프로필 등에서 알 수없는 경우). –

관련 문제