2014-10-08 1 views
0

내가 읽고있는 모든 내용은 IIS가 로컬 컴퓨터의 시간과 표준 시간대를 사용하며 유효 시간대와 시간을 변경하기 위해 시간과 시간대를 변경해야한다고 말합니다. 서버로 변경하고 IIS 서버가 보는 유효 시간대와 표준 시간대를 변경하고 간단한 WCF 서비스를 실행하는 서버가 있습니다.이 서버는 저에게 맞지 않습니다.IIS가 잘못된 시간과 시간대를보고 함

이 서버는 임대 된 팜의 태평양 잔디에 있지만 처음 설정할 때 동부 표준 시간대가 구성되어 있습니다. 나는 모든 것을 다시 시도하고 상자를 튀는 시도도, 그래서 나는 그것이 시간 값 또는 너무 간단하게 캐시되지 않습니다 확신합니다. 그러나 WCF 코드를 깨고 왜 3 시간이 지나면 모든 서비스를 사용하지 않는지 알기 위해 IIS는 태평양 표준 시간대에있는 것으로 확신합니다.

System.TimeZoneInfo.Local은 태평양 표준시로보고하고 DateTime.Now는 3 시간 씩 타임 스탬프를 제공하며 IIS를 동양을 사용해야하는 방법을 알 수없는 것 같습니다. 작성하고 전달하는 레코드의 유효 시간대로 나타내는 시간.

답변

1

일반적으로 서버 측 코드는 이 아니어야합니다.은 현지 시간대에 따라 다릅니다. 서버 응용 프로그램에서 TimeZoneInfo.Local 또는 DateTime.Now으로 전화하는 것은 대개 실수입니다. The Case Against DateTime.Now을 참조하십시오.

서버를 Coordinated Universal Time (UTC)으로 설정하고 응용 프로그램을 작성하여 내부적으로 표준 시간대를 관리하는 것이 가장 좋습니다. 당신이 동부 시간에 의존하는 경우, 다음 코드 같은 것을 수행해야합니다 TimeZoneInfo.Local.IdPacific Standard Time을 반환하는 경우 말했다

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
DateTime now = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz); 

을, 만 두 가지 설명이있다 :

  • 당신의 시스템은 실제로 태평양 표준 시간대로 설정됩니다.

  • 시스템 은 태평양 표준 시간대로 설정된이지만 다시 시작하거나 TimeZoneInfo.ClearCachedData을 호출하지 않고 변경했습니다.

문제를 설명한 방식에서이 두 가지 설명을 모두 제거 했으므로 시간대 설정 방법에 문제가 있음을 알 수 있습니다.

Administrator 승격 명령 프롬프트에서 tzutil.exe을 사용해보십시오. tzutil /g은 현재 시간대 설정을 제공합니다. tzutil /s "Eastern Standard Time"은 미국 동부 표준 시간대를 설정합니다. 관리 콘솔에서 응용 프로그램 풀을 다시 사용하거나 iisreset을 사용하여 IIS를 다시 시작하거나 서버를 재부팅해야만 시간대를 변경 한 후에 응용 프로그램을 다시 시작하십시오.

시간대 제어판에서 변경하기 만하면됩니다.

당신이 그 모든 짓을했는지, 당신은 tzutil /g에서 다시 "Eastern Standard Time"을 얻고 있지만, TimeZoneInfo.Local.Id 당신이 다시 부팅 한 경우에도, 그때는 BS 전화 "Pacific Standard Time"을 반환하는 말을하는 경우. 그건 불가능합니다.아마도 여러 서버에 배포하고 결과를 얻는 것보다 다른 서버에 시간대를 설정하는 것과 같은 간단한 설명이있을 것입니다.

+0

내 문제는 DateTime.Now를 사용하는 것보다 조금 더 깊은 것입니다. Visual Studio의 직접 실행 창에서이 두 가지 호출을 사용하여 문제를 확인했습니다. 다른 서버에서 ASPX 응용 프로그램에 대한 데이터 연결을 제공하기 위해 DataSet 개체에서 통신하는 이전 WSE 서비스를 상속 받았습니다. 나는 그것을 WCF로 변환 하였지만, 관련 코드의 막대한 양의 데이터 집합에 대해 이야기하는 나쁜 절차를 처리하지 못했습니다. –

+0

우리의 모든 DB DateTime은 이미 UTC로 기록되어 있으며 ASPX 서비스는 클라이언트 시간으로 변환을 처리하지만 WCF는 날짜가 현지 시간으로 가정하고 수신 측에서 세 시간을 조정합니다. 미분. 관련된 모든 코드를 기반으로 –

+0

저는 모든 레코드를 현지 시간으로 변환 할 준비가되지 않았기 때문에 수신 서비스가 UTC로 다시 변환 할 수 있으므로 ASPX는 클라이언트 시간으로 올바르게 변환 할 수 있습니다. APSX와 WCF가 동일한 시간대에 있어야하기 때문에 현지 시간을 가정하는 WCF는 문제가 아니지만 WCF가 잘못된 시간대를 가정 할 때 UTC 날짜가 전환 중에 엉망이되고 있습니다. 또한 TZUtil은 "동부 표준시"를보고하고 있습니다. 저는 오늘 밤 IIS 웹 서버뿐만 아니라 전체 서버를 반송하여 결과가 무엇인지보고 내일 다시보고 할 것입니다. –

관련 문제