У меня есть sql таблица с данными как это:
| theDate (datetime) | theValue (int) |
----------------------------------------
| 2010-05-17 02:21:10 | 5 |
| 2009-03-12 04:11:35 | 23 |
| 2010-02-19 18:16:53 | 52 |
| 2008-07-07 22:54:11 | 30 |
Даты хранятся в формате UTC в столбце даты и времени, как я могу преобразовать их в местное время (Норвегия)? Помните, что смещенным UTC не является то же весь год из-за зимы/летнего времени.
ОБНОВЛЕНИЕ: Я использую Microsoft SQL Server 2005, и я должен сделать это от SQL, потому что данные покажут отчету позже.
Этот оператор будет работать с таблицей, которую вы указали. Используя логику, вы можете применить ее к любым полям даты.
SELECT CASE
WHEN [theDate] BETWEEN
Convert(DATETIME, Convert(VARCHAR(4), Year([theDate])) + '-03-' + Convert(VARCHAR(2), (31 - (5 * Year([theDate])/4 + 4) % 7)) + ' 02:00:00', 20)
AND
Convert(DATETIME, Convert(VARCHAR(4), Year([theDate])) + '-10-' + Convert(VARCHAR(2), (31 - (5 * Year([theDate])/4 + 1) % 7)) + ' 03:00:00', 20)
THEN Dateadd(hh, 2, [theDate])
ELSE Dateadd(hh, 1, [theDate])
END AS [theDate],
[theValue]
FROM [YOURTABLE]
Используя PHP, если вы можете ...
$dateFormat = 'r';
$tz = 'Australia/Perth';
function convertDate($epochDate) {
global $dateFormat, $tz;
$tzOld = getenv("TZ");
putenv("TZ=$tz");
$ret = date($dateFormat, ($epochDate*1));
putenv("TZ" . ($tzOld ? "=$tzOld" : ""));
return $ret;
}