私の状況では、データをSQL Serverデータベースに格納し、2005年以降をサポートしています。DateTime値が保存されるとき、それはクライアントの現地時間にあります。他のクライアントがどのタイムゾーンにいるかに関係なく、どこにいても他のクライアントでその日付を取り戻すことができる必要があります。
したがって、たとえば、ニューヨークのユーザーが「2012-12-20 00:00」のDateTime値を入力した場合、カリフォルニアのユーザーに同じDateTime値を表示させたいと思います。これらのDateTime値は、タイムゾーンの違いを尊重するべきではありませんが、それが私が起こっていることです。現在、SQLServerはそのDateTimeを「2012-12-1921:00」としてカリフォルニアのユーザーに配信します。ESTからPSTへの変更による-3時間のロールバックにより、現在は前日になっていることに注意してください(この会話では、DSTの問題については忘れてください)。
そのデータを逐語的に取得し、タイムゾーンごとに変換しないことは、私が達成する必要があることです。では、どのようなアドバイスを提供できますか?
考慮すべきいくつかのコード:
表は次のとおりです。
CREATE TABLE [dbo].[tblMeterReadings](
[fldMeterReadingsID] [int] IDENTITY(1,1) NOT NULL,
[fldMeterID] [int] NOT NULL,
[fldUser] [varchar](50) NULL,
[fldBy] [varchar](50) NULL,
[fldDateOfReading] [datetime] NULL,
[fldReading] [float] NULL,
[fldIsArchived] [bit] NULL DEFAULT ((0)),
作業を行うSqlクラスがあり、次の例では、「sql」はそのクラスのオブジェクトです。呼び出しは、パラメータ化されたクエリを使用して行われます。ここで、@ data0は、SQLのDateTimeフィールドに格納するDateTimeオブジェクトです。
sql.Execute(@"INSERT INTO tblMeterReadings (fldMeterID, fldDateOfReading) VALUES (" + MeterID + ", @data0)", Date);
最終的に、これはSqlCommandを設定し、パラメーターを割り当て、command.ExecuteNonQuery()呼び出しを起動します。
ここで、日付を取得するには、DataTableで日付を選択するだけです(ここでも、SQLクラスヘルパーを使用します)。
DataTable myTable = sql.readDataTable(@"SELECT fldMeterID, fldDateOfReading FROM tblMeterReadings");
つまり、データベース自体では、日付は予想どおり「2012-12-20 00:00」ですが、デバッグでmyTableの内容を調べると、そのテーブルの日付は「2012- 12-1921:00"。
データベースは、EST状態のマシンで実行されるSQLServer上に作成されました。ただし、私のマシンはPSTに設定されています。したがって、SELECTでDateTime値が配信される方法の違い。
私は何が欠けていますか?