2016-05-19 17 views
0

私の現在の仕事では、日付の時間の計算にいくつかの不一致があります。これはユーザーの詳細管理と似ています。ユーザーは有効化日付(dd/mm/yyyy)と有効期限(dd/mm/yyyy)を持ちます。 UIから日付の詳細が収集され、SQL DBに保存されます。たとえば、ユーザーXYZが今日作成された場合(2016年5月19日)、ユーザーXYZの有効期限は19-05-2016、有効期限は25-05-2016(ユーザーの希望に基づく)に設定されます。DateTime Error with TimeZoneInfo.ConvertTimeToUtc()

ユーザー名:XYZ

アクティベーション日:19-05-2016

有効期限:だから25-05-2016

サイトで詳細を表示しようとしていますユーザーの詳細がSQL DBから取得され、日付時刻がUTCタイムゾーンに変換された後、詳細がユーザービュー用のサイトに渡されます。 DBでは、日付はそのままですが、TimeZoneInfo.ConvertTimeToUtc()を使用して変換すると、日付の値が1減らされます(日付が19-05-2016の場合は28-05-2016として変換されます)

クエリの
select username, activationdate, expirydate from UserDetails where username = 'XYZ' 

結果は、ConvertTimeToUtc(後そこでUTC、

ExpiryDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)user.expirydate); 
ActivationDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)user.activationdate); 
// after execution of these statements 
// ExpiryDate = 2016-05-18 00:00:00.000 
// ActivationDate = 2016-05-24 00:00:00.000 

に変換した後

username | activationdate   | expirydate 
------------------------------------------------------------ 
XYZ  | 2016-05-19 00:00:00.000 | 2016-05-25 00:00:00.000 

ある)実際のactivationdate 2016年5月19日00:00:00.000変換2016-05-18 00:00:0 0.000 ansの有効期限2016-05-25 00:00:00.000は、2016-05-24 00:00:00.000として変換されます。私は、TimeZoneInfo.ConvertTimeToUtc()がConvert the specified date and time to Coordinated Universal Time (UTC)になるというリンクを参照しました。私はまた、現在の日付と時刻をUTCにgoogleでオンライン変換しようとしましたが、時刻がUTCに変換されますが、この日付の違いはほとんど見られません。私の混乱は、このUTC変換が日付を1つの完全な日付で減らしている理由です。または何かが間違っていますか?

これに関する任意の提案は役に立ちます。

+0

ユーザーは、ユーザーのタイムゾーン時間に相当するUTCで保存しています。時間をクライアントに戻すと、UTCからユーザーのタイムゾーン情報に変換されますか? –

答えて

1

ここでの問題は、2016-05-19 00:00:00.000というように日付を格納することです。ユーザーからのタイムスタンプである分秒を含む正確な時刻を取得してください。夜間にISTから来ていると思います12時には時計が彼らが私たちの後ろにいるということです。なぜあなたは前の日付を見ているのですか。あなたに質問があれば教えてください。

+0

また、正確な時間も1日の違いがまだあります:( –

+0

C#でコーディングするのではなく、SQLで変換しようとするとSELECT CONVERT_TZ( "columnname"、@@ session.time_zone、 '+00 :00 ')、次にC#にバインドします。 – Mani