在mysql中将时间转换为不同的时区

时间:2016-10-12 05:49:50

标签: mysql

我正在使用服务器时间保存订单详细信息,即" 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参数?或者还有其他更好的方法吗?

3 个答案:

答案 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