【问题标题】:How to get the difference in Localtime and GMT time python?如何获得 Localtime 和 GMT 时间 python 的差异?
【发布时间】:2011-04-27 07:45:41
【问题描述】:

我得到了服务器日期,我需要得到这个日期与 GMT 的差异

我明白了

Datetime = "2011-04-27 2:17:45"

我想得到类似的结果

Datetime = "2011-04-27 2:17:45 +0500"

【问题讨论】:

    标签: python datetime timezone


    【解决方案1】:

    试试这个:

    import datetime, pytz
    now = datetime.datetime.now(pytz.timezone('Asia/Kolkata'))
    
    print now.strftime('%Y-%m-%d %H:%M:%S %z')
    
    # prints: '2011-04-27 13:56:09 +0530'
    

    【讨论】:

    • 很遗憾,Python著名的“含电池”并不适用于这么简单的操作:(
    • @Glorphindale - 这不是一个简单的操作。 pytz.timezone('Europe/Paris') 评估为 +0100+0200 取决于冬季/夏季,20 或 30 年前甚至不同。所以你必须通过datetime对象本身。
    • 我的意思是对pytz模块的依赖,不包含在标准库中。
    【解决方案2】:

    根据您给出的示例,在我看来您正在寻找的是datetime.isoformat。页面中的示例显示了如何将日期时间值转换为带有时区信息的 ISO 格式。

    【讨论】:

      【解决方案3】:

      为此,您必须知道服务器日期的时区(或 UTC 偏移量)。您在这里拥有的是一个“幼稚”的日期,没有时区信息,您无法猜测 UTC 差异。

      【讨论】:

        【解决方案4】:

        我认为datetime 模块是您需要的:

        >>> from datetime import datetime
        >>> datetime.now()
        datetime.datetime(2011, 4, 27, 11, 8, 26, 149000)
        >>> datetime.utcnow()
        datetime.datetime(2011, 4, 27, 8, 8, 47, 712000)
        

        对于两个日期之间的差异:

        >>> dtnow = datetime.now()
        >>> dtutc = datetime.utcnow()
        >>> dtnow - dtutc
        datetime.timedelta(0, 10792, 847000)
        

        在 Python 的文档中查找 datetime 模块和相关类。

        【讨论】:

          【解决方案5】:

          日期时间标准python库的一个非常强大的扩展是dateutil,它可以让您轻松地:

          • 设置您所在时区的增量:
          • 使用各种方便的选项解析日期(在我们的例子中,我们将使用default 选项,这将允许我们设置我们的时区)

          所以第一个设置时区,以及该区域的默认日期:

          >>> from datetime import datetime 
          >>> from dateutil import parser
          >>> from dateutil.tz import tzoffset
          >>> tz_plus_5 = tzoffset(None, 5 * 60 * 60) # offset is in seconds !
          >>> default = datetime.now(tz_plus_5)
          

          现在在解析中使用这个默认日期:

          >>> Datetime = "2011-04-27 2:17:45"
          >>> my_date = parser.parse(Datetime, default=default)
          >>> my_date
          datetime.datetime(2011, 4, 27, 2, 17, 45, tzinfo=tzoffset(None, 18000))
          >>> my_date.strftime("%Y-%m-%d %H:%M:%S %z")
          '2011-04-27 02:17:45 +0500'
          

          【讨论】:

            【解决方案6】:

            对于那些只需要获取本地时间和 UTC 之间的偏移量的人,time 模块有一个属性 time.altzone 指定 UTC 和本地时间之间的差异(以秒为单位):

            本地 DST 时区的偏移量,以 UTC 以西的秒数(如果已定义)。如果当地 DST 时区在 UTC 以东(如在西欧,包括英国),则这是负数。仅当日光不为零时才使用此选项。

            这是一个如何工作的例子:

            >>> datetime.now().isoformat()
            '2011-09-01T17:26:46.971000'
            >>> datetime.utcnow().isoformat()
            '2011-09-01T15:27:32.699000'
            >>> time.altzone / (60*60)
            -2
            

            没有比这更干净的了。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-30
              • 1970-01-01
              • 2014-10-04
              • 2019-04-14
              • 2018-03-31
              • 2018-03-27
              • 2020-12-24
              • 2011-01-18
              相关资源
              最近更新 更多