首页 > 其他分享 >Odoo—货运管理—odoo时差问题

Odoo—货运管理—odoo时差问题

时间:2023-11-01 22:33:11浏览次数:25  
标签:tz time 时差 hours Odoo odoo date local

第一次踩odoo时差的坑,才知道原来odoo在存储日期数据时,是以UTC0时区存放的,和北京时间相差8个小时。只是odoo本身能很好的处理日期数据的存储和展示,所以刚开始接触odoo,不容易发现这个问题。

在做货运管理的时候,生成货运订单编号的格式是自己定义的,根据当日的运单数量自动往下递增,如下所示:

但是在第二天早上,新增加运单的时候,发现运单号上面的日期依然是昨天的,很是奇怪,搜索了下相关的资料,才发现是时差的原因导致的,虽然可以通过已知的8个小时的时差做计算,但这显然不是我们想要的,如果系统使用的地方采用的不是东8区的时间怎么办呢?以下是采用的最终方案代码:

 1  # 生成自定义编号数据
 2     def generate_custom_code(self):
 3         # 获取当前用户时区
 4         tz_name = self._context.get('tz') or self.env.user.tz
 5         # 计算当前时区和UTC0时差      
 6         utc_time = fields.Datetime.now()
 7         local_time = utc_time.astimezone(pytz.timezone(tz_name))
 8         date_format = "%Y-%m-%d %H:%M:%S"
 9         string_utc = utc_time.strftime(date_format)
10         string_local = local_time.strftime(date_format)
11         datetime_utc = datetime.strptime(string_utc, date_format)
12         datetime_local = datetime.strptime(string_local, date_format)
13         time_difference = (datetime_local-datetime_utc).total_seconds()/3600
14         tz_hours = timedelta(hours=time_difference)
15         hours = timedelta(hours=24-time_difference)
16         # 构造查询数据条件
17         current_time = fields.Datetime.now()
18         local_date = (current_time + tz_hours).replace(hour=0,
19                                                        minute=0, second=0, microsecond=0)
20         date_start = local_date-tz_hours
21         date_end = local_date+hours
22         record_count = self.search_count(
23             [('create_date', '>=', date_start), ('create_date', '<', date_end)])
24         return f'HY{local_date.strftime("%Y%m%d")}{record_count + 1:04d}'
View Code

通过计算odoo当前用户的时区和utc0之间的时差,然后再做相关的计算处理。这样一来,即使用户在其他的地方使用,也不受影响。

点击链接查看完整源码:github

点击链接阅读:菜园工程师

 

标签:tz,time,时差,hours,Odoo,odoo,date,local
From: https://www.cnblogs.com/heavenspring/p/17804305.html

相关文章

  • odoo 下载大量pdf使用内存太大,异常退出,pdf 分页
    说白了,还是因为wkhtmltopdf工具使用的内存太大,打印200个页面就会直接内存超标,直接退出直接改源码了,每次让pdf转换工具只处理50个记录@http.route(['/report/download'],type='http',auth="user")defreport_download(self,data,token):"""Thisfunctionis......
  • odoo pdf 打印任务后台运行,pdf保存在附件中, 借助queue_job模块实现后台打印
    用户故事:在打印大批量pdf文件时会有较长事件的等待,而且容易中断原因中断原因,有内存及超时限制,wkhtmltopdf工具比较吃内存解决方案:内存限制的问题可以分批处理,比如每次只处理50条记录代码示例,使用按钮触发的打印功能:#model:[email protected]......
  • 安装odoo16
    ubuntu:22.04sudoapt-getinstallpython3.10pip3installvirtualenvcd/datavirtualenvnewodooenvsudoapt-getinstallpostgresql=15.0sudoapt-getlibsasl2-devlibldap2-devlibssl-devlibpq-devsudoapt-getinstallodoo=16.0cdodoodirsudo/da......
  • odoo 的一些widget
    widget="ace"widget="attachment_image"widget="boolean_button"widget="barcode_handler"widget="char_domain"widget="dummy"widget="char_domain"widget="char"......
  • vue+odoo前后端搭建
    项目所需前端用vue的element组件后端用odoo 1、为什么选用element(饿了么)源自vuevue国人开发文档完善便于自学关键是我以前接触过比react上手快一开始的路线是想直接在template里面引入vue的js在xml混写,结果总是报错,这两天一直在想办法解决报错最后没解决今晚上只......
  • 重启服务 odoo
    重启服务/etc/init.d/postgresqlrestartsudoservicepostgresqlstopsudoservicepostgresqlstartsudoserviceodoo16stopsudoserviceodoo16startsudosystemctlstopnginxsudosystemctlstartnginx##设置开机自启动sudosystemctlenablepostgresql登陆pgsudo-......
  • odoo 通知和刷新当前页面
     this.actionService.doAction({'type':'ir.actions.client','tag':'reload',});this.actionService.doAction({......
  • odoo fileupload via controller
      #-*-coding:utf-8-*-#PartofOdoo.SeeLICENSEfileforfullcopyrightandlicensingdetails.importbase64fromcollectionsimportOrderedDictfromdatetimeimportdatetimefromodooimporthttpfromodoo.exceptionsimportAccessError,Missin......
  • odoo controller
    一:Controller  一般通过继承的形式来创建controller类,继承自odoo.http.Controller。  以route装饰器来装饰定义的方法,提供url路由访问路径:classMyController(odoo.http.Controller)://继承controller定义控制器@route('/some_url',auth='public')//装饰器路由访问方......
  • odoo 加用户
     加用户definsert(self,info):a=self.env['hr.department'].create({'name':info['orgcode_show']})b=self.env['hr.employee'].create({'name':info['USERNAME'],......