2009-10-12 8 views
10

レガシーデータベースから日付と時刻を使用する必要があります。それらは文字列として表されます。日付はdd/MM/yyです。時はHH:mmです。英国時間(BSTとGMTの両方)を文字列としてUTC(C#)に変換する

データベースからプルするとすぐにこれらをUTCに変換したいと思います。私は米国のシステムで作業しているので、共通の時間が必要です。

私が直面している問題は、それらをUTCのDateTime値に変換する方法です。私は解析などを行うことができます。私が持っている本当の問題は、タイムゾーンに関係しています。日付が英国夏時間の期間中である場合

DateTime ukTime = // Parse the strings in a DateTime value. 
TimeZoneInfo timeZoneInformation = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); 
DateTimeOffset utcTime = new DateTimeOffset(ukTime, timeZoneInformation.BaseUtcOffset); 

しかし、これは間違った値を示します:

は、私は、次のアプローチを使用しようとしています。

私はこれらの日付に "GMT夏時間"を使用できますが、それはスイッチオーバーの時期を知る必要があります。あまり面倒な方法でなければならないと確信しています。

私はイギリスの時間設定のマシンを使用していないため、現地時間に頼ることはできません。私は記事を洗い上げてきましたが、直接これに対処何かを見つけることができませんでした

// Works for both GMT (UTC+0) and BST (UTC+1) regardless of the regional settings of the system it runs on. 
DateTime ParseUkTimeAsUtcTime(string date, string time) 
{ 
    ... 
} 

は基本的に、私のような何かを必要としています。確かにこれはEST、EDTなどの問題でもありますか?

+0

これは一般的なTimeInTimeZone-> TimeInUTCメソッドとして必要です。 –

答えて

5

TimeZoneInfoインスタンスでGetUtcOffset()メソッドを使用してください。この場合、調整ルールが考慮されます。

これは、元の例と基本的に同じですが、BaseUtcOffsetプロパティの代わりにそのメソッドを使用します。

DateTime ukTime = // Parse the strings in a DateTime value. 
TimeZoneInfo timeZoneInformation = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); 
DateTimeOffset utcTime = new DateTimeOffset(ukTime, timeZoneInformation.GetUtcOffset(ukTime)); 
+0

いいですが、知らない人のためのコードサンプルを投稿することはできますか?これは標準的なリソースでなければなりません。 –

+0

この例では、必要な作業をカバーする必要があります。あなたがこれを単純化してくれたら教えてください。 – bdukes

+0

これに加えたいのは、実際のDateTimeオブジェクトを取得することです。これは、 'utcTime.UtcDateTime'を参照しています。 –

0

方法について:

DateTime.Parse(dateTimeString).ToUniversalTime(); 

データベースサーバーがアプリケーションサーバーと同じ時間帯にその日付時刻を格納すると仮定すると。

関連する問題