2017-04-03 9 views
0

두 개의 웹 서버 WEB1과 WEB2가 있습니다. 함수 :ASP.net은 다른 서버에서 다르게 렌더링합니다.

public static string ToTimeAgoHTML(this DateTime date) 
{ 
    return "<time class=\"timeago\" datetime=\"" + date.ToString("o") + "\">" + date.FriendlyDate() + "</time>"; 
} 

값이 호출됩니다. 이들은 같은 렌더링 :

WEB1 Web2입니다이 작업을 수행하지 않는 반면 WEB1가, 마지막에 z로 렌더링하는

<time class="timeago" datetime="2017-04-03T15:12:04.9072263Z">3 Apr, 2017</time> 

Web2입니다

<time class="timeago" datetime="2017-04-03T15:12:04.9072263">3 Apr, 2017</time> 

참고. 이로 인해 Web2에 대한 요청이 과거 1 시간 동안 표시되었습니다.

두 웹 서버 시간대는 Windows에서 (UTC) Coordinated Universal Time으로 설정됩니다.

여기에 무슨 일이 일어날 지 아는 사람이 있습니까?

+0

문화 란 무엇입니까? – mason

+0

@Mason 두 웹 서버 모두 IIS의 'Invariant Language (Invariant Country)'에서 동일합니다 –

+0

실제 스레드에서 확인합니다. 'Thread.CurrentThread.CurrentCulture'와'Thread.CurrentThread.CurrentUICulture'를 확인하십시오. – mason

답변

1

ToString("o")를 사용하는 것은 당신이 전달하는 DateTimeKind 속성에 관련되어 출력 :

  • DateTimeKind.Utc으로, 문자열이 Z로 끝납니다 - DateTimeKind.Local으로 UTC
  • 을 의미, 문자열 것 끝은 UTC에서의 오프셋 (예 : -07:00)입니다.
  • DateTimeKind.Unspecified으로 문자열은 시간 부분 이후에 끝납니다. 시간대 오프셋 정보가 전달되지 않으므로 어느 시점이든 가능합니다.

이것은 ISO8601 표준과 정확히 일치합니다. 또한 in the MSDN docs으로 설명됩니다.

한 서버가 다른 서버와 다른 출력을 생성하는 이유를 알아 보려면 데이터를 가져 오는 위치를 파악해야합니다. 내 생각에 Web1은 DateTime.UtcNow에서 시작된 값을 전송하고 Web2는 파일, 데이터베이스에서 값을 읽거나 종류를 지정하지 않고 수동으로 구성한 것입니다.

+0

당신은 정확합니다, 고마워요! 서버 중 하나가 레드 스 (Redis)에서 독서를하고 있었다. –

+0

Redis에서의 검색시'DateTime.SpecifyKind'를 사용하십시오. –