2013-07-31 9 views
6

döndürür Eklenti ve Web sitesi, SQL Server'dan veri almak için Core projesinden aynı yöntemleri kullanır.dönüştürme UTC ben üç projenin bir çözüm garip sonuç

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

ve

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

benim Outlook Eklentisi In veri almak

şudur ki: Ben veritabanına benim veri yazma, ben UTC saat içine iki tablo tüm DateTime değerlerini dönüştürmek doğru sonuç:

enter image description here enter image description here

Web sitemde aynı açarak, kazma gayet:

enter image description here

Ama benim başlangıç ​​ve bitiş zamanı "kırık" olduğu - eklenir ofset yanlış saat kullanılır Bute:

İşte

enter image description here, benim dönüştürmek için kod de o Outlook ve web sitesi, kullanım:

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(); 
} 

Ve DateTime.FromUtc() uygulanması:

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

Ben DateTime.ToLocalTime() ile aynı sonucu vardı. Fikir sahibi olan var mı?

DÜZENLEME 1:

Bu başlangıç ​​ve bitiş (End yerine Start ait olan uç) web sitesinde görüntülenen alır nasıl:

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" 
     }; 

Ve seçer:

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, biçimlendirilmiş DateTime dizesini döndürür:

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

Web sayfanızdaki saati görüntülemek için kullandığınız kod nedir? – Romoku

+0

@Romoku kodu – Herdo

+0

ekledi Ben [Kind] (http://msdn.microsoft.com/en-us/library/system.datetime.kind.aspx) özelliği iki arasında farklı olduğunu tahmin edeceğim. – Greg

cevap

1

Şimdi sorunu çözdüm. Başlangıç ​​ve bitiş için DateTime değerleri doğru şekilde dönüştürülmedi: Değerler yerel saate göre dökümlenmedi.

yerel saatle olduğu gibi web DateTimeKind.Unspecified olarak yerine tutmanın her DateTime değeri ekleme sırasında (örn DateTimeKind.Utc) verileri belirtilen SQL sunucusu mağazaları olduğunu, zaman görüntülenen nedeni. Verileri sunucudan okurken, her Türlü DateTimeKind.Unspecified, yani DateTime'un .ToString() yerel türünü kullanır. Bu, UTC zaman + yerel UTC uzaklık sonucunu verir.