Kullanıcı, metin kutusuna ayrı bir tarih ve saat girer. Sonra tarih ve saati datetime olarak birleştiririm. Veritabanına kaydetmek için bu tarih saatini UTC'ye dönüştürmem gerekiyor. Kullanıcının saat dilimi kimliğini veritabanında saklıyorum (kayıt olduklarında seçtiler). Bu bir istisna sonuçlandıKullanıcı tarafından UTC'ye girilen datetime dönüştürme
string userTimeZoneID = "sometimezone"; // Retrieved from database
TimeZoneInfo userTimeZone = TimeZoneInfo.FindSystemTimeZoneById(userTimeZoneID);
DateTime dateOnly = someDate;
DateTime timeOnly = someTime;
DateTime combinedDateTime = dateOnly.Add(timeOnly.TimeOfDay);
DateTime convertedTime = TimeZoneInfo.ConvertTimeToUtc(combinedDateTime, userTimeZone);
: Birincisi, şu çalıştı
Sonra şöyle Kind özelliği ayarlama çalıştı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
:
DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Local);
Bu vermedi iş, bu yüzden denedim:
DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Unspecified);
Bu, işe yaramadı. Yapmam gerekeni kimse anlatabilir mi? Bu şekilde doğru yoldan mı gidiyorum? DateTimeOffset kullanmalı mıyım?
olası yinelenen (http://stackoverflow.com/questions/4668921/convert-local-time deneyebilirsiniz -to-utc-in-net-framework-3-0) – Shai
@Shai: Açıkçası, bu sorunun sahip olduğu gibi bir yinelenen: ".NET framework 3.0'da kullanmalıyım, bu yüzden TimeZoneInfo nesnesini kullanamıyorum." –
@JonSkeet Ahhh bunu görmedi, OP'ye bir kurşun verebilirdi .. – Shai