DateTime을 UTC로 변환하는 데 어려움을 겪고 있습니다. 개념과 모든 것, 올바르게 이해하지 못하는 것입니다. 내가 날짜 시간 문자열을 얻을 때날짜를 UTC로 올바르게 변환 한 다음 다시 변환하는 방법?
는 단순히
Convert.ToDateTime("7/10/2013").ToUniversalTime();
이것은 2013년 7월 10일 오전 4시 0분 0초 "로 기록합니다 할"2013년 7월 10일 "을 말한다 "데이터베이스에. 서버는 미국 동부 해안 (-5)에 있습니다. 물론 2013 년 7 월 동안 DST가 계속 관찰되고 있으므로 해당 시간 동안 오프셋 된 시간은 -4 일입니다. 추가 4 시간 4:00:00 AM "은 UTC로 기록됩니다.
나는 이것을 작성하고 있습니다. 포스트, 2014 년 2 월이고 DST가 적용되지 않아 현재 오프셋이 -5입니다. 내 신청서에서 신청서에서 내가 선택한 오프셋입니다.
"-7/에 -5 오프셋을 적용하면/오전 4시 0분 0초 2013 7/09/2013 오후 11시 0분 0초 ".
"날짜는 것이다 될 것 "언젠가는 잘못되어 있습니다.
질문 # 1
그렇다면 내가 제대로 UTC 시간을 다시 변환합니까? 사용자가 2014 년 2 월에 현재 내 애플리케이션을로드 할 때 (현재 시간대 오프셋 -5 사용), 2011 년 7 월 10 일 4:00:00 AM은 2013 년 7 월 10 일에 2012 년 7 월 9 일이 아니라 여전히 7/10/2013이어야합니다.
나를 혼란스럽게하는 이유는 .ToUniversalTime()이 서버 DST를 고려하기 때문에 서버가있는 위치의 영향을받지 않는 "보편적 시간"이라는 하드 세트가 있습니까?
질문 # 나는 서쪽과 동쪽 해안 모두에서 서버가있는 경우, 데이터베이스에 쓰기 어떻게됩니까 2
? 동시 또는 서해안을 기준으로 UTC 시간을 기록한 경우 응용 프로그램에서 어떻게 알 수 있습니까?
기본적으로 코드에서 "7/10/2013 4:00:00 AM"은 동해안에서 만들어진 UTC 시간입니다 (미국의 경우 7/10/2013 00:00:00 AM을 나타냅니다). 동부 해안) 서쪽 해안에있는 서버가 아닙니다 (즉, 미국 서부 해안의 경우 7/09/2013 20:00:00 pm "임을 나타냅니다.)
미안하지만 바보 같은 소리가 나면 죄송합니다.
========== 최종 편집, 내 현재 솔루션 ===============
미모의 대답은 의미. 나는 두 가지를 혼동되었다한다 .
- 데이터베이스에 저장된 UTC 시간은 서버에 어떤 영향을 줍니까?
- 응용 프로그램 사용자에 대한 서버 시간의 관계는 무엇입니까?
내 응용 프로그램은 다른 표준 시간대의 사용자가 사용할 수 있으며 일부 사용자는 서버와 동일한 시간대에 있습니다. 일부 사용자는 그렇지 않습니다.일부는 이동하기 때문에 서버와 동일한 시간대에 있더라도 항상 다른 시간대에 착륙 할 수 있습니다. 내 응용 프로그램을 사용하면 시간대를 적절하게 반영하는 시간대를 선택할 수 있습니다.
원래 데이터베이스에서 UTC 시간을 가져 와서 사용자의 시간대 오프셋을 뺍니다. 미모가 제안했듯이, 그것은 잘못입니다. 이유는 위의 내 게시물에서 볼 수 있습니다.
내 원래의 해결책은 서버의 시간대 오프셋을 지금 당장 사용하고 UTC에서 더하기/빼기를 사용하는 것이 었습니다. 그 역시 잘못된 것입니다. 2012 년 7 월 10 일을 기준으로 당시 서버의 오프셋은 -4였습니다. 2014 년 2 월 현재 서버 시간대 오프셋은 -5입니다. 그 해결책은 당연히 .ToLocalTime()을 사용하는 것입니다.
TimeZone.ToLocalTime()을 사용하는 방법에 대한 Mimo의 제안을 자세히 살펴보기 전에 여기에 임시로 문제를 해결했습니다.
데이터베이스에서 UTC 날짜를 가져 와서 서버가 표시하는 .ToLocalTime으로 변환하십시오. 그래서 서버로, 2011 년 7 월 10 일 4:00:00 AM은 7/10/2013 12:00:00 AM이됩니다.
서버 시간대 오프셋을 가져옵니다. 현재 동부 해안에 있기 때문에 현재 -5가 표시됩니다.
사용자의 시간대 오프셋을 가져옵니다. 서해안의 경우 사용자는 지금 -8을 선택합니다. 동해안의 경우, 사용자는 지금 -5를 선택하십시오.
사용자의 시간대와 서버의 시간대가 달라집니다. 서해안은 -3입니다. 동부 해안은 0입니다.
7/10/2013 12:00:00 AM의 차이를 뺍니다. 따라서 서해안의 기한은 2011 년 7 월 9 일 21:00:00 PM이며 동해안의 기한은 7입니다/10/2013 12:00:00.
모두 맞습니다.
고마워요. 이제 TimeZone.ToLocalTime()을 살펴보고 2-5 단계를 줄일 수 있는지 확인하십시오. 당신은 UTC로 데이터베이스에 로컬 시간을 저장하려면
시간 (개체) 만 남겨두고 시간을 UTC로 표시하는 것과 관련하여 생각해보십시오. – Bit
날짜/시간을 보유하고있는 열의 SQL 데이터 유형은 무엇입니까? – wdosanjos