私は3つのプロジェクトの解決策を持っています:
- 芯
- Outlook アドイン
- ASP.NET Web サイト
Outlook アドインと Web サイトはどちらも、コア プロジェクトの同じ方法を使用して、SQL Server からデータを取得します。データをデータベースに書き込むときDateTime
、2 つのテーブルのすべての値を 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 アドインでデータを取得すると、これが正しい結果になります。
私のウェブサイトで同じものを開くとき、ピックは問題ありません:
しかし、私の開始時間と終了時間は「壊れています」 - オフセットが追加されていますが、間違った時間が使用されています:
Outlook と Web サイトの両方で使用する、私の変換用のコードは次のとおりです。
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:
これは、開始と終了が Web サイトに表示される方法です (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);