SQL Server 2005でUTCとローカル時間(PSTなど)の日付を変換する方法
SQL Server 2005でUTCとローカル時間(PSTなど)の日付を効果的に変換する方法
GETDATE() と DATEADD() 関数を使う
この方法は、単純でわかりやすい方法です。
-- UTCからPSTへの変換
DECLARE @utcDate DATETIME
SET @utcDate = '2024-04-05 06:57:00.000'
SELECT DATEADD(hh, -8, @utcDate) AS PSTDate;
-- PSTからUTCへの変換
DECLARE @pstDate DATETIME
SET @pstDate = '2024-04-05 06:57:00.000'
SELECT DATEADD(hh, 8, @pstDate) AS UTCDate;
この方法では、GETDATE()
関数を使用して現在の日時を取得し、DATEADD()
関数を使用して、オフセット時間(PSTの場合は-8時間)を加減することで変換を行います。
DATETIME2 データ型を使う
SQL Server 2005では、DATETIME2
データ型が導入されました。 このデータ型は、タイムゾーン情報を含むことができます。
-- UTCからPSTへの変換
DECLARE @utcDate DATETIME2
SET @utcDate = '2024-04-05 06:57:00.000Z';
SELECT @utcDate AT TIME ZONE 'Pacific Standard Time';
-- PSTからUTCへの変換
DECLARE @pstDate DATETIME2
SET @pstDate = '2024-04-05 06:57:00.000-08:00';
SELECT @pstDate AT TIME ZONE 'UTC';
この方法では、DATETIME2
データ型を使用して、タイムゾーン情報を含む日付時刻を格納します。 AT TIME ZONE
関数を使用して、別のタイムゾーンに変換することができます。
sys.time_zone_info ビューを使う
SQL Server 2005では、sys.time_zone_info
ビューが導入されました。 このビューには、タイムゾーンに関する情報が格納されています。
-- UTCからPSTへの変換
SELECT
CONVERT(VARCHAR(10), GETDATE(), 120) + ' ' +
CONVERT(VARCHAR(10), GETDATE(), 108) + ':' +
CONVERT(VARCHAR(10), GETDATE(), 100) + '.' +
CONVERT(VARCHAR(10), GETDATE(), 121) + ' ' +
tzi.abbreviation
FROM sys.time_zone_info tzi
WHERE tzi.name = 'Pacific Standard Time';
-- PSTからUTCへの変換
SELECT
CONVERT(VARCHAR(10), GETDATE(), 120) + ' ' +
CONVERT(VARCHAR(10), GETDATE(), 108) + ':' +
CONVERT(VARCHAR(10), GETDATE(), 100) + '.' +
CONVERT(VARCHAR(10), GETDATE(), 121) + ' ' +
tzi.abbreviation
FROM sys.time_zone_info tzi
WHERE tzi.name = 'UTC';
この方法では、sys.time_zone_info
ビューを使用して、タイムゾーン情報の取得と変換を行います。
上記の方法のいずれかを使用して、SQL Server 2005でUTCとローカル時間(PSTなど)の日付を効果的に変換することができます。
それぞれの方法には、メリットとデメリットがあります。
- 方法1は、単純でわかりやすいですが、オフセット時間を手動で指定する必要があります。
- 方法2は、タイムゾーン情報を含むデータ型を使用するため、より正確な変換を行うことができます。
GETDATE() と DATEADD() 関数を使う
-- UTCからPSTへの変換
DECLARE @utcDate DATETIME
SET @utcDate = '2024-04-05 06:57:00.000'
SELECT DATEADD(hh, -8, @utcDate) AS PSTDate;
-- PSTからUTCへの変換
DECLARE @pstDate DATETIME
SET @pstDate = '2024-04-05 06:57:00.000'
SELECT DATEADD(hh, 8, @pstDate) AS UTCDate;
DATETIME2 データ型を使う
-- UTCからPSTへの変換
DECLARE @utcDate DATETIME2
SET @utcDate = '2024-04-05 06:57:00.000Z';
SELECT @utcDate AT TIME ZONE 'Pacific Standard Time';
-- PSTからUTCへの変換
DECLARE @pstDate DATETIME2
SET @pstDate = '2024-04-05 06:57:00.000-08:00';
SELECT @pstDate AT TIME ZONE 'UTC';
sys.time_zone_info ビューを使う
-- UTCからPSTへの変換
SELECT
CONVERT(VARCHAR(10), GETDATE(), 120) + ' ' +
CONVERT(VARCHAR(10), GETDATE(), 108) + ':' +
CONVERT(VARCHAR(10), GETDATE(), 100) + '.' +
CONVERT(VARCHAR(10), GETDATE(), 121) + ' ' +
tzi.abbreviation
FROM sys.time_zone_info tzi
WHERE tzi.name = 'Pacific Standard Time';
-- PSTからUTCへの変換
SELECT
CONVERT(VARCHAR(10), GETDATE(), 120) + ' ' +
CONVERT(VARCHAR(10), GETDATE(), 108) + ':' +
CONVERT(VARCHAR(10), GETDATE(), 100) + '.' +
CONVERT(VARCHAR(10), GETDATE(), 121) + ' ' +
tzi.abbreviation
FROM sys.time_zone_info tzi
WHERE tzi.name = 'UTC';
補足
- 上記のサンプルコードは、SQL Server 2005で動作確認済みです。
SQL Server 2005でUTCとローカル時間(PSTなど)の日付を変換するその他の方法
T-SQL の CAST 関数を使用して、日付時刻型を別のデータ型に変換できます。 例えば、UTC 日時を PST 日時に変換するには、次のように記述します。
SELECT CAST(GETDATE() AS DATETIMEOFFSET(8)) AS PSTDate;
SELECT CONVERT(VARCHAR(10), GETDATE(), 120) + ' ' +
CONVERT(VARCHAR(10), GETDATE(), 108) + ':' +
CONVERT(VARCHAR(10), GETDATE(), 100) + '.' +
CONVERT(VARCHAR(10), GETDATE(), 121) + ' ' +
'PST';
DECLARE @utcDate DATETIME
SET @utcDate = GETDATE()
SELECT @utcDate.ToLocalTime() AS PSTDate;
サードパーティ製のライブラリを使用する
日付時刻の操作を容易にするサードパーティ製のライブラリも存在します。 例えば、Noda Time ライブラリを使用すると、次のように記述できます。
using NodaTime;
var utcDate = SystemClock.UtcNow;
var pstDate = utcDate.InZone(DateTimeZoneProviders.Tzdb["America/Los_Angeles"]);
SQL Server 2005でUTCとローカル時間(PSTなど)の日付を変換するには、さまざまな方法があります。 ご自身の要件に合わせて、最適な方法を選択してください。
sql-server