私はこれで最後の日かそこらで頭を悩ませてきました。ここの誰かが光を当てることができることを願っています.
最近、UTC の Amazon RDS SQL Server に移行しました。ただし、データベース内のすべての時間はローカル タイム ゾーン (西ヨーロッパ) です。私の次の課題は、これらすべての DateTime を UTC に変換することです。
最も簡単な方法は、Sql Serverで直接行うことだと思いますが、DSTを説明する簡単な方法がないため、SQL CLRのユーザー定義関数に頼りました(ここの別の回答から見られます)。現時点では動作しません。現在、次のようになります。
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlDateTime ToUniversal(SqlDateTime dt)
{
if (dt.IsNull)
{
return SqlDateTime.Null;
}
else
{
return dt.Value.ToUniversalTime();
}
}
ただし、この関数はローカル時間から世界時への変換は行いません。例、
select creationtime, dbo.ToUnversal(CreationTime) as New from testtable
元の日時でもある同じ 2 つの日時を返します。
何故ですか?Sql Server が既に UTC にあるため、それを認識してそれ以上変換しないためですか?
また、他に推奨されるアプローチがあれば、追加してください。私はすでに小さな.NETアプリケーションでそれを解決しようとしましたが、120GBのデータベースでは非常に遅いです.