Użytkownik wprowadza datę i godzinę w osobnych polach tekstowych. Następnie łączę datę i godzinę w datetime. Muszę przekonwertować tę datę i czas na UTC, aby zapisać ją w bazie danych. Mam identyfikator strefy czasowej użytkownika zapisany w bazie danych (wybierają go, gdy się rejestrują). Najpierw próbowałem następujące:Konwertuj datetime wprowadzone przez użytkownika do UTC
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);
Spowodowało to wyjątek:
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
Następnie próbowałem ustawienie obiektu tak:
DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Local);
to nie działa, więc próbowałem:
DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Unspecified);
To też nie działa. Czy ktoś może wyjaśnić, co muszę zrobić? Czy nawet robię to w prawidłowy sposób? Czy powinienem używać DateTimeOffset?
możliwy duplikat [Konwersja czasu lokalnego na UTC w .NET Framework 3.0] (http://stackoverflow.com/questions/4668921/convert-local-time -to-utc-in-net-framework-3-0) – Shai
@Shai: Oczywiście nie duplikat, ponieważ to pytanie ma: "Muszę używać w .NET Framework 3.0, więc nie mogę używać obiektu TimeZoneInfo." –
@JonSkeet Ahhh tego nie widziałem, może dać OP prowadzenie chociaż .. – Shai