postgresql - 将十六进制转换为日期格式 utc-5 Postgresql
问题描述
你好朋友我正在尝试将十六进制转换为必须为 utc-5 格式秘鲁时间的日期
这是我尝试进行此转换的功能:
CREATE OR REPLACE FUNCTION public.hex_timestamp(
text)
RETURNS timestamp without time zone
LANGUAGE 'sql'
COST 100
IMMUTABLE STRICT
AS $BODY$
select
(to_timestamp(('x' || lpad($1, 16, '0'))::bit(64)::bigint / 1000.0))::timestamptz at time zone 'utc-5'
$BODY$;
ALTER FUNCTION public.hex_timestamp(text)
OWNER TO postgres;
这是我的十六进制值:
0000017B3DB65648
但是,时间不正确,因为我比当前日期提前一天,而且时间也不正确
13/08/2021 04:12:45
我想让你告诉我正确的日期和时间以及秘鲁时间,这是它应该显示的正确时间
12/08/2021 23:23:53
感谢您的帮助
解决方案
您似乎正在使用我从这个相关答案中的十六进制到十进制转换:
这会将十六进制转换0000017B3DB65648
为十进制1628827965000
:
SELECT ('x' || lpad('0000017B3DB65648', 16, '0'))::bit(64)::bigint; -- 1628827965000
该数字似乎代表自 Postgres 时代 (2000-01-01 00:00:00) 以来的毫秒数。看:
SELECT to_timestamp(1628827965000 / 1000) AT TIME ZONE 'UTC'; -- '2021-08-13 06:12:45'
, extract('epoch' FROM timestamp '2021-08-13 04:12:45') * 1000; -- 1628827965000
您想要的结果是2021-08-13 23:23:53
,这恰好是19:11:08
稍后的时间间隔(19 小时,11 分钟,8 秒)。
那是毫秒,和 69068000
之间的差异。1628897033000
1628827965000
这似乎没有任何意义。通过调整时区,我们无法达到您想要的结果。
请检查您的问题是否有错别字,并告诉我们十六进制数字应该准确代表什么。
推荐阅读
- php - 因为当每个复选框选择多个类别时,数据库中只显示一个
- c# - 是否有工具或策略可以找出项目需要引用的所有 .dll 和 nuget 包?
- .net - 如何在 DevExpress XtraReport 详细信息带中对计算字段中的值进行分组?
- python - 在 django 中创建联系我们页面时出错?
- jquery - 从 FileList Ajax 上传之前删除文件
- apache-spark - 循环导出 pyspark 数据帧并合并为一个 df
- swift - swift中的Error.LocalizedDescription用法
- python - Python 字符串的两种实现与 unicode 整数等价物列表的计算时间差异很大的原因
- javascript - 如何在单个 Google Analytics 帐户上配置多个域
- r - R - 根据参数获取列表中每个数据框的列名