go/go-pg插入time.Time字段为date类型时值自动变化的问题

news2024/11/16 1:34:59

今天偶然间发现一个问题,基于go-pg框架插入数据时,时间值自动减了1天。

目录

背景

现象与场景还原

问题解决与总结


背景

结构体中包含时间列类型,列类型是Date,对应的结构体类型是time.Time,此时对此对象做插入操作(经验证,不论批量插入还是单条均有此问题),就会出现该现象,插入的是2023-06-09,而db中插入进去的是2023-06-08。

现象与场景还原

复杂业务就不贴了,这里就以比较典型的案例说明。

由于实际场景的数据是真实的time.Time,但同样的我们直接造一个time.Time类型的数据也能说明,极简代码如下:

 构造一个6月9日0时整的时间类型,然后进行插入,此时去DB查看:

可以看到问题复现了,9日变成了8日。

接着,将hour和min参数都改为1,也就是不设置整点了,我们直接用一个9日1点的时间插入看看,结果还是一样,插入后变为2023-06-08。

接着,将hour参数改为8,也就是用一个9日8点的时间插入,结果是2023-06-09,这次正确(有点曙光了)。

以上三次验证所用的时间点实际都是9日的并不是8日的,结果前两次插入还都变为了8日,难道是哪里时区设置的不对?

有的童鞋说了,会不会是pg的时区值设置的不对?查一下时区看看:

时区没问题,那看看现在时间是否正常,select now(); 的结果也正常,与当前时间一模一样。

那会不会是time.Date最后面的时区参数设置的不对?

问题的焦点往往就在一念之间,就是这里的问题,实际上改为time.Local也一样的现象,但改为time.UTC,再插入居然对了。

因此原因就确定了,实际来源于转换成time.Time时转换的参数不正确,时区问题导致了这样的现象,和orm框架没有关系。

问题解决与总结

待插入的Time数据检查一下看看是否有此问题,有则改之。

下面结论已经过验证:

(1)该问题在date类型的列上出现,也就是当类型为日期时可以用上述办法解决。

(2)但如果是timestamptz类型的列(时间),插入前转换时不可用UTC,可以用time.Local或fix8小时的办法,如插入的是2023-06-09 00:01:05,前者在插入后时间会变为8点05而不是1点05,后面两个是正常的。

这次没想到居然踩了这样一个坑,共勉!

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/642710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Segment Anything使用手册(交互式数据标柱|自动数据标柱)

主要内容包含segment-anything项目的安装、基于SamPredictor对单点输入生成mask、基于SamPredictor对多点输入生成mask、基于SamAutomaticMaskGenerator自动生成mask。 Segment Anything项目是一个可以对任何图像进行分割的项目,其论文介绍可以查看https://blog.cs…

【JavaWeb】Cookie和Session的使用场景分析与应用

哈喽,大家好~我是你们的老朋友:保护小周ღ Cookie 和 Session 都是网页中常用的状态保持的技术,它们可以帮助网站识别用户身份,保存用户状态等,什么是 Cookie ?什么是 Session ?他们具体是什么…

Docker部署SonarQube代码质量检查平台+PostgreSQL数据库

一、安装PostgreSQL11(PostgreSQL7.9之后不支持MySQL) 检查代码的时候,仓库或者本地的代码会全部存储到postgresql数据里中,所以容量尽量大点,我这给个300G 指定拉取postgres11版本,不要postgres:latest,因为你部署so…

命令行创建uniapp项目

命令行创建uniapp项目 除了使用HBuilderX工具可视化搭建项目外,DCloud官方还提供了一个脚手架用于命令行搭建项目。 环境安装 全局安装vue-cli npm i vue/cli4 -g建议使用vue-cli 4.x版本,vue-cli 5.x与webpack存在冲突,会导致运行报错 …

聘准备-数据科学家

https://www.zhihu.com/question/21592677/answer/786529944

爆肝整理,性能测试-负载测试总结,你不知道的都在这了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试中最容易…

软件测试进阶知识 —— 性能测试

性能测试 性能测试是指在一定条件下系统行为表现是否符合需求规格的性能指标。 例如,通过测试传输的最长时限、传输的错误率、计算的精度、响应的时限和恢复时限等性能指标,验证了软件系统是否能够达到需求规格说明中所提出的性能指标,发现了…

vue的使用及运行

Vue使用 <!-- 从三方网站 引入网上的vue 需要网络 --> <!-- <script src"https://cdn.jsdelivr.net/npm/vue2.7.14/dist/vue.js"></script> --> <!-- 本地引入 --> <script src"./js/vue.js"></script><div…

vcruntime140.dll下载,快速解决vcruntime140.dll缺失的问题

在使用Windows操作系统时&#xff0c;有时会遇到“vcruntime140.dll缺失”等错误提示。这意味着系统中出现了一些严重的问题&#xff0c;可能是由于vcruntime140.dll文件损坏或缺失导致的。本文将详细介绍vcruntime140.dll的作用以及如何进行vcruntime140.dll下载来修复缺失的问…

STM32开发环境搭建工程创建(嵌入式学习)

STM32开发环境搭建&工程创建 1. 开发环境搭建1.1 STM32CubeMX简介安装 1.2 Keil5简介安装 1.3 ST_LINK简介安装 2. 创建STM32工程 1. 开发环境搭建 1.1 STM32CubeMX 简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境&#xff08;IDE&#xff09;工具&…

基于Github开源项目Next Chat4 —— 之原生Js前端特效给你的眼睛来一场视觉盛宴吧

前期回顾 打造极简风格动效 —— 5 分钟轻松实现惊艳、震撼人心的视觉效果_彩色之外的博客-CSDN博客css Loading 实战教学https://blog.csdn.net/m0_57904695/article/details/131156011?spm1001.2014.3001.5501 &#x1f44d; 本文专栏&#xff1a;开发技巧 一键使用 GP…

精通postman教程(四)-创建请求及添加参数 详解

作为一名测试工程师&#xff0c;那么Postman绝对是大伙必备的工具之一。 在这个系列教程中&#xff0c;我将为大伙详细讲解如何使用Postman进行API测试。 今天我为大伙讲解postman如何创建请求及添加参数&#xff0c;让你们快速上手这款工具。 一、处理GET请求 Get请求用于…

敏捷实践 | 8个实用方法助你开好有效的敏捷反思会

又是年底&#xff0c;各大app都推出各种年度总结&#xff0c;年度回顾。这些总结有的很有趣&#xff0c;有的很扎心&#xff0c;在推动年底KPI完成的同时&#xff0c;也给我们带来不同角度的思考。而在敏捷工作方法中&#xff0c;反思回顾也是敏捷实践很关键的一环。那么我们如…

链动2+1系统开发模式,如何助力企业平台月赚上百万?

现在市面上的商业模式数不胜数&#xff0c;各种各样的都有&#xff0c;而链动21就是其中非常优质的一款商业模式。它不仅能够让消费者消费全返&#xff0c;还能够助力企业平台月赚上百万&#xff0c;而且完全的合法合规&#xff0c;那么链动21模式是怎么做到的呢&#xff1f;下…

2023年惠州/广州/深圳NPDP产品经理认证,这里够专业

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

C 语言实现一个简单的 web 服务器

说到 web 服务器想必大多数人首先想到的协议是 http&#xff0c;那么 http 之下则是 tcp&#xff0c;本篇文章将通过 tcp 来实现一个简单的 web 服务器。 本篇文章将着重讲解如何实现&#xff0c;对于 http 与 tcp 的概念本篇将不过多讲解。 一、了解 Socket 及 web 服务工作…

高并发下数据一致性问题:数据库+缓存双写模式分析

前言 随着互联网业务的发展&#xff0c;其中越来越多场景使用了缓存来提升服务质量。从系统角度而言&#xff0c;缓存的主要目标是减轻数据库压力&#xff08;特别是读取压力&#xff09;并提高服务响应速度。引入缓存就不可避免会涉及到缓存与业务数据库数据一致性的问题&…

充电桩计量检测TK4860E交流充电桩检定装置

固定检定点&#xff1a;系统预设24A220V和12A220V的检定点&#xff0c;可完成单相32A或单相16A充电桩的工作误差的检定&#xff0c;24A和12A检定点的设计既可满足实际输出达不到额定电流的单相充电桩的检定&#xff0c;又可保证检定效率。 固定电量&#xff1a;系统可预设充电…

源代码安全管理

现在&#xff0c;随着软件开发公司对源代码保护的日益重视&#xff0c;源代码已成为企业核心竞争力的关键因素之一。为了确保企业在同行中展露头角并具备核心竞争力&#xff0c;源码的保护变得至关重要。 目前&#xff0c;源代码加密有两种常用方式&#xff1a;物理性和软件性…

leetcode 139.单词拆分

题目描述 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链…