2016-08-31 5 views
0

ニューヨークで稼働しているサーバーで、DateTimeを現地時間でデータベースに保存しています。c#DataTime:ESTをGTMに変換すると仮定します。

TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")) 

または私は夏時間を考慮する必要があります。

私はその後、同じローカルニューヨーク時間 の日時を下に保存する必要がGMTタイムゾーンで動作するクライアントアプリケーションを持っている私が使用して行うことができますか?

私のUIでは2つの列を表示する必要があります。 1)データベースからのDateTimeとGMTに変換されたデータベースのDateTime

どのようにすればいいですか?

+3

実際にESTの場合、5時間を追加することができます。しかし、東部時間になる可能性がより高いと思われます。時にはEST、場合によってはEDTです。その時点で、あなたは正確に何かを知る必要があります*どの東部時間、さまざまな時代のET移行の異なる時として、または歴史的に行っている... –

+0

ありがとうジョン。 5時間を追加するのではなく、夏時間を考慮する必要はありませんか? – Bob

+0

これは私のコメントの要点でした。あなたはEastern * Standard * Time、no ...から変換することはできませんでしたが、 "時々東部標準時間、時には東部夏時間"から変換している場合は、そうします。東部標準時と東部標準時の間には大きな違いがあります。 –

答えて

0

TimeZoneInfoクラスは、必要なものを提供します。

var date = (DateTime)reader[0]; // Retrieve data from database however you normally get it 

var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
var utcTime = TimeZoneInfo.ConvertTimeToUtc(date, est); 

var localTime = utcTime.ToLocalTime(); 

編集:あなたはTimeZoneInfoを見ていることを示すために質問を変更しました。これでこれ以上多くは追加されません。しかし、Jonが言及しているあいまいな時間の問題を解決するには、確定的に変換できない値を検出できるように、IsAmbiguousTime()GetAmbiguousTimeOffsets()のメソッドを見てください。

0

これは期待どおりに動作することを示すサンプルです。つまり、DST変換を行います。

DateTime dt1 = new DateTime(2016, 06, 01, 08, 00, 00, DateTimeKind.Unspecified); // Daylight saving time 
DateTime dt2 = new DateTime(2016, 12, 01, 08, 00, 00, DateTimeKind.Unspecified); // Standard time 

var dt1Converted = TimeZoneInfo.ConvertTimeToUtc(dt1, 
    TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")); 
var dt2Converted = TimeZoneInfo.ConvertTimeToUtc(dt2, 
    TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")); 

var diff1 = (dt1Converted - dt1).TotalHours; 
var diff2 = (dt2Converted - dt2).TotalHours; 

Console.WriteLine($"dt1: {dt1}, converted: {dt1Converted}, diff: {diff1}"); 
Console.WriteLine($"dt2: {dt2}, converted: {dt2Converted}, diff: {diff2}"); 

出力:

dt1: 2016-06-01 08:00:00, converted: 2016-06-01 12:00:00, diff: 4 
dt2: 2016-12-01 08:00:00, converted: 2016-12-01 13:00:00, diff: 5 
0

DateTimeOffsetを使用するには、これを変更することができます任意のチャンスはありますか?これらの問題をすべて解決するように設計されています

関連する問題