Odoo 中文社区

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    • Users
    • Groups

    Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

    开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

    如果您登录系统碰到问题,请在微信公众号留言:

    odoo时间的处理?

    Odoo 开发与实施交流
    2
    2
    2612
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      iooop last edited by iooop

      关于odoo处理时间的机制,对以下现象感到困惑:
      测试一:
      如果在odoo的python代码中,以下代码
      datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
      会产生utc时间(不带时区的),结果跟datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S')是完全一样的!

      测试二:
      如果在同一台机器的python终端上运行datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),却会产生一个带时区的本地时间(结果比上面的增加8小时)
      同样的python内置的datetime,为什么产生不一样的结果?odoo中间做了什么处理了吗?

      另外,上面是的测试时在linux(debian)下。如果在windows中,现象跟上述不一样。
      测试一和测试二产生的时间是一致的,结果都是带时区的时间。


      ========================EDIT=======================
      受到以下文章的启发:
      http://radzhang.iteye.com/blog/2328612
      原来,在odoo/__init__.py初始化时做了个“时区hack”,将系统环境的时区设置成了'UTC',经这一处理后,上述测试的现象和结果就能解释通了。并且经过这么处理后,在odoo代码中使用datetime.datetime.now()和datetime.datetime.utcnow()是完全一样的效果,不用纠结用哪一个。需要注意odoo/__init__.py中的“时区hack”仅对linux环境起作用。

      至于在windows中的现象,其实在最新的odoo版本中,通过命令行启动的odoo实例也能实现上述的“时区hack”,但是在Windows的IDE(比如eclipse)中,odoo官方好像还没有解决的方法来实现这种“时区hack”。具体说法可以参考github中odoo/__init__.py的comments(https://github.com/odoo/odoo/commit/07bf7bf4f3af49f18a06000ef50ef90d8ad90224 )

      1 Reply Last reply Reply Quote 2
      • Joshua
        Joshua 管理员 last edited by

        谢谢分享 :aplauso:

        我顺便贴下代码:

        odoo/__init__.py这个是用于unix系统

        #----------------------------------------------------------
        # libc UTC hack
        #----------------------------------------------------------
        # Make sure the OpenERP server runs in UTC.
        import os
        os.environ['TZ'] = 'UTC' # Set the timezone
        import time
        if hasattr(time, 'tzset'):
            time.tzset()
        

        odoo-bin这部分用于windows系统,因为在windows里通过修改环境变量来使time的时区改变必须在time模块被import前。

        __import__('os').environ['TZ'] = 'UTC'
        

        【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

        1 Reply Last reply Reply Quote 0
        • First post
          Last post