2013-07-31 12 views
6

रिटर्न मैं तीन परियोजनाओं के एक समाधान है:परिवर्तित यूटीसी अजीब परिणाम

  1. कोर
  2. आउटलुक ऐड-में
  3. ASP.NET वेबसाइट

दोनों, आउटलुक ऐड-इन और वेबसाइट SQL प्रोजेक्ट से डेटा प्राप्त करने के लिए कोर प्रोजेक्ट से समान विधियों का उपयोग करती है।

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 

मैं अपने आउटलुक ऐड-इन में डेटा मिलेगा, तो यह है: जब मैं डेटाबेस में अपने डेटा लिखते हैं, मैं UTC समय में दो तालिकाओं के सभी DateTime मूल्यों कन्वर्ट सही परिणाम:

enter image description here enter image description here

जब मेरी वेबसाइट में एक ही खोलने, की पसंद ठीक हैं:

enter image description here

लेकिन मेरी प्रारंभ और समाप्ति समय "टूटे" कर रहे हैं - ऑफसेट जोड़ा जाता है, Bute गलत घंटे इस्तेमाल कर रहे हैं:

enter image description here

यहाँ, मेरी परिवर्तित करने के लिए कोड है दोनों कि, आउटलुक और वेबसाइट, उपयोग:

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() साथ एक ही परिणाम था। कोई भी विचार है?

संपादित करें 1:

यह कैसे आरंभ और अंत (EndStart के बजाय साथ अंत) वेबसाइट पर प्रदर्शित किया जाता है:

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 स्वरूपित दिनांक समय स्ट्रिंग देता है:

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 सर्वर भंडार DateTimeKind.Unspecified रूप रखने के बजाय हर DateTime मूल्य डेटा (जैसे DateTimeKind.Utc) निर्दिष्ट डालने के दौरान। सर्वर से डेटा पढ़ने पर, सभी प्रकार DateTimeKind.Unspecified हैं, इसलिए .ToString()DateTime स्थानीय प्रकार का उपयोग करता है। इसका परिणाम यूटीसी समय + स्थानीय यूटीसी ऑफसेट में होता है।

संबंधित मुद्दे