2013-07-31 12 views
6

を返し、私は3つのプロジェクトのソリューションを持っています。Outlookアドインでは 現地時間にUTCを変換すると、奇妙な結果

  • ASP.NET Webサイト
  • どちらも、見通し

    1. コア
    2. アドインとウェブサイトは、コアプロジェクトと同じ方法を使用してSQL Serverからデータを取得します。

      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アドインでデータを取得

      、これは次のとおりです。私はデータベースに自分のデータを書き込むときに、私はUTC時間に二つのテーブルのすべてのDateTime値を変換します正しい結果

      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

    [種類](http://msdn.microsoft.com/en-us/library/system.datetime.kind.aspx)プロパティが2つの間で異なると推測します。 – Greg

    答えて

    1

    私は今問題を解決しました。 DateTime開始値と終了値が正しく変換されませんでした。値はローカル時間にキャストされませんでした。

    現地時間があるとして、ウェブサイトがDateTimeKind.Unspecifiedとして代わりにを維持するすべてのDateTime値は挿入時に(例えばDateTimeKind.Utcデータを指定したSQLサーバーに格納することを、時間を表示する理由、。サーバーからデータを読み取るときは、すべての種類がDateTimeKind.Unspecifiedなので、.ToString()DateTimeはローカル種類を使用します。これにより、UTC時間+ローカルUTCオフセットになります。

    関連する問題