32

SQLサーバーでUTCミリ秒をDateTimeに変換したい。

これは、次のコードによって C# で簡単に実行できます。

DateTime startDate = new DateTime(1970, 1, 1).AddMilliseconds(1348203320000);

SQLサーバーでこれを行う必要があります。ここでいくつかのスクリプトを見つけましたが、これは 1900-01-01 から最初のティックを取得していました。

私はDATEADD以下のように関数を使用しましたが、これは差としてミリ秒を与えることによって算術オーバーフロー例外を与えていました:

SELECT DATEADD(MILLISECOND,1348203320000,'1970-1-1')

変換を正しく行うにはどうすればよいですか?

4

7 に答える 7

61
DECLARE @UTC BIGINT
SET @UTC = 1348203320997 

SELECT DATEADD(MILLISECOND, @UTC % 1000, DATEADD(SECOND, @UTC / 1000, '19700101'))
于 2012-09-21T05:24:31.160 に答える
3

SQL Server 2008R2 を使用すると、必要な結果が得られました。

CAST(SWITCHOFFSET(CAST(dateadd(s, convert(bigint, [t_stamp]) / 1000, convert(datetime, '1-1-1970 00:00:00')) AS DATETIMEOFFSET), DATENAME (TZoffset, SYSDATETIMEOFFSET())) AS DATETIME)
于 2016-03-31T17:18:44.443 に答える
1

DATEADD、2番目の引数として整数を必要とします。あなたの数1348203320000は整数に対して非常に大きいので、実行時にエラーが発生します。代わりにtypeを使用bigintし、ミリ秒を秒とミリ秒に分割してDATEADDに正しいint値を提供する必要があります。それはあなたが使うことができるサンプルです。

DECLARE @total bigint = 1348203320000;

DECLARE @seconds int = @total / 1000
DECLARE @milliseconds int = @total % 1000;

DECLARE @result datetime = '1970-1-1';
SET @result = DATEADD(SECOND, @seconds,@result);
SET @result = DATEADD(MILLISECOND, @milliseconds,@result);
SELECT @result
于 2012-09-21T05:24:04.670 に答える
0

現在、dateadd を使用して、秒単位ではなく分単位で除算できます。

コードは次のようになります。

DATEADD(MILLISECOND, epoch% 60000, DATEADD(MINUTE, epoch/ 60000, '19700101'));

于 2018-05-15T14:56:38.850 に答える