我正在使用服务器时间保存订单详细信息,即" Central Daylight Time"时区为Unix时间戳。所以order_date是服务器时间。我需要的是,将其转换为韩国时间。以下是我使用的查询。
SELECT
`order_date`,
FROM_UNIXTIME(`order_date`),
CONVERT_TZ(FROM_UNIXTIME(order_date), 'US/Central', 'Asia/Seoul')
FROM
my_orders
WHERE order_id="123"
这为转换日期提供了null结果。有什么我必须改变CONVERT_TZ参数?或者还有其他更好的方法吗?
答案 0 :(得分:2)
不是手动转换查询中的时间戳,而是将它们存储为MySQL的timestamp
类型,并在您用于访问数据库的任何API中使用本机时间戳支持。 (例如,在JDBC中,您将使用ResultSet.getTimestamp
方法。)这应该自动处理数据库中的时区问题,并在应用程序中为您提供一个时间戳对象,您可以在任何时间显示它你想要的区域。
时区是演示问题。数据库不应将时间戳格式化为特定时区;让应用程序这样做。
答案 1 :(得分:2)
我希望以下答案对您有所帮助。
CONVERT_TZ(Date_Column,"+00:00",Your_Offset)
在此Your_Offset =“+5:30”(+5:30适用于印度,因为GST + 5:30)。
您也可以参考this link
答案 2 :(得分:1)
尝试使用Php代码转换时间,而不是在Mysql上转换。
面向对象的风格
<?php
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";
?>
程序风格
<?php
$date = date_create('2000-01-01', timezone_open('Pacific/Nauru'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
date_timezone_set($date, timezone_open('Pacific/Chatham'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
?>
以上示例将输出:
2000-01-01 00:00:00 + 12:00
2000-01-01 01:45:00 + 13:45