我的目标是抵消表 Date_times 中的时间戳以反映本地时区。我有一个 Timezone_lookup 表,我用它,它有一个列 utc_convert ,它的值是(2,-1,5等),具体取决于时区。
我以前在Oracle中使用import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset("iris")
setosa = iris.loc[iris.species == "setosa"]
virginica = iris.loc[iris.species == "virginica"]
g = sns.JointGrid(x="sepal_width", y="petal_length", data=iris)
sns.kdeplot(setosa.sepal_width, setosa.sepal_length, cmap="Reds",
shade=False, shade_lowest=False, ax=g.ax_joint, linestyles="--")
sns.kdeplot(virginica.sepal_width, virginica.sepal_length, cmap="Blues",
shade=False, shade_lowest=False, ax=g.ax_joint, linestyles=":")
sns.kdeplot(setosa.sepal_width, color="r", legend=False,
ax=g.ax_marg_x, linestyle="--")
sns.kdeplot(virginica.sepal_width, color="b", legend=False,
ax=g.ax_marg_x, linestyle=":")
sns.kdeplot(setosa.sepal_length, color="r", legend=False,
ax=g.ax_marg_y, vertical=True, linestyle="--")
sns.kdeplot(virginica.sepal_length, color="b", legend=False,
ax=g.ax_marg_y, vertical=True, linestyle=":")
plt.show()
能够将 utc_convert 值转换为小时数,因此我可以在 Date_times 中添加/减去日期时间表
对于Redshift,我找到NUMTODSINTERVAL
,但这只是用特定数字硬编码偏移量。
我也尝试过:
INTERVAL
但是这不起作用,因为 utc_convert 列中的某些数字具有负值。有什么想法吗?
答案 0 :(得分:1)
您是否尝试将偏移乘以间隔:
select current_timestamp + utc_convert * interval '1 hour'
答案 1 :(得分:0)
在Oracle中,您可以使用用户会话的时区(这意味着您无需维护时区查找表或补偿夏令时)。
SELECT FROM_TZ( your_timestamp_column, 'UTC' ) AT LOCAL
FROM Date_times
在RedShift中,您应该能够使用CONVERT_TIMEZONE( ['source_timezone',] 'target_timezone', 'timestamp')
功能,而不是添加多个间隔。这将允许您将target_timezone
指定为UTC的数字偏移量或时区名称(这将自动补偿DST)。