2

タイムゾーンなしで、Axapta-tables からタイムスタンプを取得する必要があります。TSQLたとえば、 table からJMGABSENCECALENDAR

これを最初のアプローチとして取り、これに関しては、現在の時間で機能します。しかし、他のタイムスタンプを参照してテーブルからデータを読み取ると、2 番目のリンクで提供されるソリューションでは、指定された時刻までの夏時間に関する情報が取得されません。

例えば:

本日(2012-01-07)の欠席を追加します。ここで、SSMS を使用してこのデータセットを読み取ると、

開始時間 =2013-01-06 23:00:00.000 および終了時間 =2013-01-07 23:00:00.000

大丈夫です、使えます

DECLARE @UTCOffset SMALLINT

EXEC master..xp_regread
    'HKEY_LOCAL_MACHINE',
    'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
    'ActiveTimeBias',
    @UTCOffset OUTPUT

SELECT DATEADD(MINUTE, @UTCOffset, GETDATE()) AS UTCTime 

オフセットを削除します。これは実際の日付では問題なく機能しますが、過去または未来の時間のオフセットを削除する正しい方法は何2012-07-01ですか?

ここでは、夏時間のため、オフセットは 120 分です。Reg-Value を読み取ると、現在のオフセットのみが返されます。

このタスクは、TSQL 2008 で解決する必要があります。

4

2 に答える 2

2

私も同じ問題を抱えていましたが、まったく別の設定でした。私はaxaptaとは何の関係もありませんでした。しかし、私は異なる時間のUTCオフセットを知らなければならないという問題を抱えていました。ここで注意が必要なのは、国によって夏時間に対するアプローチが異なるため、国によってオフセットの違いが同時に発生する可能性があるという事実です。

私がしたことは、UTCオフセットが変更される日付を入力するルックアップテーブルを作成することでした。これらは既知の日付です。between演算子を使用して、特定の日付に必要なオフセットを簡単に検索できるように、オフセット列を指定しました。

それは私のために働きました、多分この解決策はあなたに何かを提供することができますか?

追伸 レジストリからUTC日付オフセットを検索する必要はありません。関数getutcdate()を使用すると、同じことが得られます;)DATADD内で関数を使用すると、もう少し読みやすくなります;)

楽しんでください、そして私はあなたの問題に貢献できることを願っています...

于 2013-01-22T17:40:25.057 に答える
0

夏時間の切り替え日は年ごと、州ごとに変わるため、実行可能な唯一のオプションはルックアップ テーブルです。

たとえば、ここでデータを見つけることができますhttp://www.timeanddate.com/time/dst/2013a.html

ただし、そのリストを自分で維持する必要はない場合があります。timeanddate.com のサイトには電卓があります。他にも同様のサービスが提供されています。パブリック API を探し、数行の CLR コードを使用してデータベースからその API を呼び出すことができます。

または、そのようなサービスを使用して、そのデータの独自のコピーを維持することもできます。独自のルックアップ テーブルを持つことは、断然最速のソリューションです。

于 2013-01-23T18:12:41.310 に答える