모든 데이터베이스가 UTC 형식으로 저장됩니다. 사용자에게 자신의 시간대를 묻습니다. 시간대를 사용하고 싶습니다. 서버 시간은 UTC를 알아낼 시간입니다.내 DateTime을 UTC로 변환하는 데 문제가 있습니다.
일단 내가 검색하면 새롭게 변환 된 UTC 날짜를 사용하여 데이터베이스의 범위를 확인하고 싶습니다.
하지만 항상 예외가 발생합니다.
System.ArgumentException was unhandled by user code
Message="The conversion could not be completed because the
supplied DateTime did not have the Kind property set correctly.
For example, when the Kind property is DateTimeKind.Local,
the source time zone must be TimeZoneInfo.Local.
Parameter name: sourceTimeZone"
나는 왜 이것을 얻는 지 모른다.
나는이 그래서 난DateTime now = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
var utc = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(now,
ZoneId, TimeZoneInfo.Utc.Id);
피곤이 같은 오류와 함께 모두 실패 실패 2 가지 방법
TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById(id);
// I also tried DateTime.UtcNow
DateTime now = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
var utc = TimeZoneInfo.ConvertTimeToUtc(now , zone);
을 시도했다. 내가 도대체 뭘 잘못하고있는 겁니까?
수정이 작업을 수행할까요?
DateTime localServerTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
TimeZoneInfo info = TimeZoneInfo.FindSystemTimeZoneById(id);
var usersTime = TimeZoneInfo.ConvertTime(localServerTime, info);
var utc = TimeZoneInfo.ConvertTimeToUtc(usersTime, userInfo);
난 그냥도 모두이 작업을 수행 할 필요가 없습니다 수도에 대해 생각했다 존 소총
야 @ 편집 2. 시간의 문제로 인해 지금 당장 혼란 스럽기 때문에 게시물이 왜 그렇게 분명하지 않을 수 있습니다. 나는 도대체 DateTime.How가 (시간대를 다른 시간대로 변경하려고 시도했는데 내 로컬 시간대를 계속 유지하면서) 무엇을 얻는 지 결코 알지 못합니다.
이것은 내가하고 싶은 일입니다. 사용자가 사이트에 와서 일부 경고를 추가하고 이제는 utc (DateTime.Now가되기 전에 누군가가 UTC 모든 것을 저장하도록 제안 됨)로 저장됩니다.
그래서 사용자가 내 사이트에 방문하기 전에 내 호스팅 서버가 어디에 있던지 다음 날과 같을 수 있습니다. 따라서 경고가 8 월 30 일 (시간) 표시되지만 서버의 시간차가있는 것으로 알려졌다면 8 월 29 일에 경고 메시지가 표시됩니다.
그래서 나는 그걸 싸우고 싶었습니다. 그래서 지금 나는이 오프셋 된 것들을 사용하여 현지 시간을 저장해야하는지 확신 할 수 없습니까? 또는 UTC 시간 만 저장하십시오. UTC 시간을 저장하는 것만으로도 여전히 사용자가 현지 시간으로 생각할 것이므로 UTC가 실제로 작동하는 방식을 확신 할 수 없기 때문에 여전히 시간 차이가 발생할 수 있습니다.
EDIT3
var info = TimeZoneInfo.FindSystemTimeZoneById(id)
DateTimeOffset usersTime = TimeZoneInfo.ConvertTime(DataBaseUTCDate,
TimeZoneInfo.Utc, info);
'DateTime.Now.Kind'는 이미'Local'입니다; 당신은'SpecifyKind'를 호출 할 필요가 없습니다. – SLaks
@ 편집 2 : UTC로 경고를 저장하고 내 대답에 표시된대로 사용자가 제공 한 시간대에 표시하십시오. – dtb
그러면 어떻게 작동할까요? 나는 DateTime.UtcNow를 얻고 DB로부터 경보를 여과합니까? 발견 된 결과를 현지 시간으로 변환 하시겠습니까? – chobo2