2013-07-31 3 views
6

У меня есть решение трех проектов:Преобразование UTC в местное время возвращает странный результат

  1. сердечника
  2. надстройки Outlook
  3. ASP.NET Сайт

Оба, перспективы Надстройка и Веб-сайт используют те же методы из проекта Core для получения данных с SQL Server. Когда я пишу свои данные в базу данных, конвертировать все DateTime значения двух таблиц в время UTC:

POLL_START    POLL_END 
2013-07-31 12:00:00.000 2013-08-01 12:00:00.000 

и

PICK_DATE 
2013-07-31 12:00:48.000 
2013-07-31 13:00:12.000 

Когда я получаю данные в моей надстройки Outlook, это правильный результат:

enter image description here enter image description here

При открытии же на моем сайте, кирки прекрасны:

enter image description here

Но мое время начала и конца являются «сломанной» - смещение добавляется, Бьют используются неправильные часы:

enter image description here

Вот код для моего преобразования, что и в Outlook и веб-сайт, использование:

private static void ConvertToLocalTime(POLL item) 
{ 
    item.POLL_START = item.POLL_START.FromUTC(); 
    item.POLL_END = item.POLL_END.FromUTC(); 
} 

private static void ConvertToLocalTime(PICK pick) 
{ 
    if (pick.PICK_DATE != null) pick.PICK_DATE = ((DateTime)pick.PICK_DATE).FromUTC(); 
} 

И реализация DateTime.FromUtc():

public static DateTime FromUTC(this DateTime value) 
{ 
    var local = TimeZoneInfo.Local; 
    return TimeZoneInfo.ConvertTime(value, TimeZoneInfo.Utc, local); 
} 

У меня был один и тот же результат с DateTime.ToLocalTime(). Любая идея?

EDIT 1:

Это как начало и конец получает отображается на веб-сайте (конец с End вместо Start):

var startCell = new TableCell 
     { 
      Text = String.Format(
       @"<a href='{0}' title='{2}' target='_blank'>{1:dd.MM.yyyy HH:mm \U\T\Czzz}</a>", 
        Common.GetTimeAndDateHyperlink(_poll.Start, "Vote Start"), 
        _poll.Start, 
        ConvertToLocalTimeZone), 
      CssClass = "InfoContent" 
     }; 

И кирки:

answerCell = new TableCell 
      { 
       Text = String.Format(
        @"<a href='{0}' title='{2}' target='_blank'>{1}</a>", 
         Common.GetTimeAndDateHyperlink(ao.Time, ao.RealAnswer), 
         ao.RealAnswer, 
         ConvertToLocalTimeZone) 
      }; 

ao.RealAnswer возвращает форматированную строку DateTime:

return String.Format(WholeTime == true ? "{0:d}" : @"{0:dd.MM.yyyy HH:mm \U\T\Czzz}", Time); 
+0

Что вы хотите, чтобы показать свое время на вашей веб-странице? – Romoku

+0

@Romoku добавил код – Herdo

+0

Я собираюсь угадать, что свойство [Kind] (http://msdn.microsoft.com/en-us/library/system.datetime.kind.aspx) отличается между двумя. – Greg

ответ

1

Я решил проблему сейчас. Значения DateTime для начала и конца не были правильно преобразованы: значения не были выбраны по местному времени.

Причина, почему сайт отображается время, как местное время, что сервер SQL магазины каждый DateTime ценности как DateTimeKind.Unspecified вместо того чтобы держать в указан данные (например, DateTimeKind.Utc) во время вставки. При чтении данных с сервера все виды: DateTimeKind.Unspecified, поэтому .ToString()DateTime использует локальный вид. Это приводит к UTC время + местное смещение UTC.

Смежные вопросы