uruchomiony program ASP.NET MVC 2 na Win 7 z .net 4.0TimeZoneInfo.ConvertTime nie konwertuje coś
Mam metody działania kontrolera, która odbiera 2 obiekty DateTime z formularza. Interfejs użytkownika w formularzu korzysta z datepika jQueryUi (nie wiem, czy to dotyczy).
Użytkownik, który wypełni ten formularz, ZAWSZE wprowadza datę/czas w hawajskiej strefie czasowej.
Chcę przekonwertować to na czas UTC i zapisać go w bazie danych.
Kiedy dzwonię do TimeZoneInfo.ConverTime (DateTime, TimeZoneInfo, TimeZoneInfo), zwraca dokładnie tę samą datę i godzinę, co do niej przekazywano, nie wykonując żadnej konwersji. Sprawdziłem debuggera i jedyną rzeczą, która się zmieniła, była zmiana właściwości DateTime.Kind na DateTimeKind.Utc.
public ActionResult New(ScheduleNew data){
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
DateTime start = TimeZoneInfo.ConvertTime(data.StartDate, tz, TimeZoneInfo.Utc);
DateTime end = TimeZoneInfo.ConvertTime(data.EndDate, tz, TimeZoneInfo.Utc);
}
Wypróbowałem również wersję alternatywną z tymi samymi wynikami.
public ActionResult New(ScheduleNew data){
DateTime start = new DateTime(data.StartDate.Year, data.StartDate.Month, data.StartDate.Day, data.StartDate.Hour, data.StartDate.Minute, data.StartDate.Second, DateTimeKind.Unspecified);
DateTime end = new DateTime(data.EndDate.Year, data.EndDate.Month, data.EndDate.Day, data.EndDate.Hour, data.EndDate.Minute, data.EndDate.Second, DateTimeKind.Unspecified);
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
StartDate = TimeZoneInfo.ConvertTime(start, tz, TimeZoneInfo.Utc);
EndDate = TimeZoneInfo.ConvertTime(end, tz, TimeZoneInfo.Utc),
}
ScheduleData to prosta klasa ViewModel z dwoma datami Właściwości o nazwie StartDate i EndDate.
Chcę podkreślić, nie obchodzi mnie, gdzie znajduje się serwer, nie obchodzi mnie, gdzie znajduje się użytkownik. Użytkownik zawsze wprowadza czas w hawajskiej strefie czasowej, a serwer powinien zawsze konwertować tę datę na UTC.
Zasadniczo chcę, aby dodać 10 godzin do czasu, kiedy użytkownik wchodzi (hawajski do utc) i mógłbym to osiągnąć przez zwykłe wywołanie .AddHours (10) i byłoby dobrze. Ale później w drodze będę potrzebować tej aplikacji, aby być bardziej elastycznym.
Czy rozwiązałeś problem? – Rory
Jaki był rodzaj danych.StartDate? – Rory