DateTimeOffset을 사용하여 모든 날짜를 저장하는 경우에도 항상 날짜를 UTC로 변환해야합니까 아니면 효율적으로 DateTimeOffset 만 사용해야합니까?시간대에 민감한 응용 프로그램에 대한 DateTimeOffset 저장
답변
답변은 - 다릅니다.
DateTimeOffset
은 타임 스탬프 + UTC 오프셋입니다. 문제는 여러 시간대가 동일한 오프셋을 공유 할 수 있지만 (다른 것들 중에서) 동일한 일광 절약 시간 규칙을 공유하지 않을 수 있으며 DateTimeOffset
에는 TimeZone이라는 개념이 없기 때문에 모호한 것으로 연결된다는 것입니다. 그러나 사용자에게 표시되지 않고 사용자가 상호 작용하지 않는 서버 측 시간 소인을 저장하는 경우 이는 괜찮을 수 있습니다. 서버 측 로깅을 예로들 수 있습니다.
IMHO 사용자 입력, 사용자 표시, 사용자 쿼리 가능 등의 타임 스탬프를 처리 할 때 가장 안전한 방법은 DateTime
을 저장하고 전체 시간대 정보를 저장하는 것입니다. TimeZoneInfo.Serialize(...)
을 사용하면 전체 시간대 정보를 문자열로 출력하고 데이터베이스에 유지하며 나중에 TimeZoneInfo.Deserialize(...)
을 통해 TimeZoneInfo 인스턴스로 deserialize하고 DateTime
을 local/utc datetime으로 변환 할 수 있습니다. 애매 모호하지 않으며 시간대가 변경 되어도 (예 : DST 변경) 데이터가 여전히 일관되므로 안전합니다. 물론 동기화를 유지하기 위해 데이터베이스를 업데이트해야합니다 (매우 드문 경우).
위의 방법을 사용하면 DateTimes를 UTC 또는 Local로 저장할 수 있으며 사용 사례에 따라 어느 것이 든 결정해야합니다. UTC로 날짜와 시간을 저장할 때 재미있는 점 중 하나는 사용자의 "오늘"이라는 개념이 약간 더 복잡해진다는 것입니다. 블로그에서이 내용을 읽을 수 있습니다 here.
- 1. 응용 프로그램 민감한 데이터 저장
- 2. 임베디드지도 응용 프로그램에 대한 이미지 저장
- 3. PCI 민감한 데이터 저장 서비스
- 4. 민감한 값을 안전한 위치에 저장
- 5. 응용 프로그램에 iPhone 응용 프로그램 설정 저장
- 6. iPhone 응용 프로그램에 암호 저장
- 7. Windows 응용 프로그램에 메모리 저장
- 8. 설정을 asp.net 응용 프로그램에 저장
- 9. WinForms 응용 프로그램에 데이터 저장
- 10. 소수의 사용자 응용 프로그램에 대한
- 11. 이 응용 프로그램에 대한 저장 메커니즘이 이미 구성되어 있습니다.
- 12. .net 응용 프로그램에 사용자 관련 정보 저장
- 13. 오픈 소스 응용 프로그램에 저장된 암호 저장
- 14. 응용 프로그램에 대한 이미지 서비스
- 15. .NET 응용 프로그램에 대한 blackberry?
- 16. 새로운 응용 프로그램에 대한 지침
- 17. 응용 프로그램에 대한 참조 페이지
- 18. 웹 응용 프로그램에 대한 인증
- 19. WPF 응용 프로그램에 대한 공격
- 20. 매시업 응용 프로그램에 대한 제안
- 21. 모바일 응용 프로그램에 대한 oauth
- 22. iPod 응용 프로그램에 대한 질문
- 23. datetimeoffset 최대 절전 매핑
- 24. com plus 응용 프로그램에 대한 Powershell 업데이트
- 25. 사용자에 대한 응용 프로그램에 대한 액세스 차단
- 26. 전자 메일을 Silverlight 응용 프로그램에 저장
- 27. 핵심 데이터 응용 프로그램에 HTML 저장
- 28. Blackberry 응용 프로그램에 긴 문자열 리소스 저장
- 29. iPhone 응용 프로그램에 인증 토큰 저장
- 30. RAILS에서 시간대에 대한 GPS 좌표를 확인하는 방법
항상 오프셋 값이 아닌 실제 표준 시간대 문자열을 저장해야합니다. – Zabba
UTC와 함께? – adriaanp