【问题标题】:How to add two offset in python?如何在python中添加两个偏移量?
【发布时间】:2012-06-03 21:37:07
【问题描述】:

我从以下行获得了 pytz 库的偏移量:

 offset = datetime.datetime.now(pytz.timezone(timezone)).strftime('%z')

首先我在timezone 变量中传递US/Eastern 然后我将Asia/Kolkata 传递到timezone 变量中,该变量打印以下值

 local_utc = -0400
 user_utc = +0530

获得这些值后,我通过以下代码将其从字符串转换为 int:

local_utc = int(local_utc)
user_urc = int(user_utc)

除此之外,我还有一个时间表:

 hour, minute,days = (timezone_tuple.tm_hour, timezone_tuple.tm_min,
                        timezone_tuple.tm_mday)

我想将local_utc and user_utc 的差异添加到上面的元组中,例如-0400:04 例如小时和00 作为分钟。 例如:差异将是:093009 将添加到 timezone_tuple.tm_hour30 将添加到 timezone_tuple.tm_min

我没有发现任何情况。怎么可能? spilit方法有什么办法吗

【问题讨论】:

  • 时区的差异不是9小时30分钟,而不是1.5小时吗?
  • 你是如何从 pytz 获得偏移量的? local_utc 是字符串吗?如果您告诉 Python local_utc = -0400,那么 local_utc 将设置为整数 -256,因为 Python 将以零开头的数字解释为八进制。
  • 让我把代码表格放在我得到偏移量的地方

标签: python timezone python-2.7


【解决方案1】:

您的帖子展示了如何将local_utcuser_utc 查找为整数。你可以用local_utc-user_utc 的差值来确定相对偏移量。

但是,datetimetimepytz 应该为您提供操作时间所需的所有工具,而无需解析偏移量并“手动”进行此类计算。

例如,

import pytz
import datetime as dt
import time

eastern = pytz.timezone('US/Eastern')
kolkata = pytz.timezone('Asia/Kolkata')

naive_timetuple = time.localtime(0)
print(naive_timetuple)
# time.struct_time(tm_year=1969, tm_mon=12, tm_mday=31, tm_hour=19, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=365, tm_isdst=0)

在上面,我定义了一个简单的时间元组。下面,我将其“本地化”为美国/东部时间——也就是说,使其成为可感知时区的日期时间:

naive_datetime = dt.datetime(*naive_timetuple[:6])
print(naive_datetime)
# 1969-12-31 19:00:00

localized_datetime = eastern.localize(naive_datetime)
print(localized_datetime)
# 1969-12-31 19:00:00-05:00

现在要将可识别时区的日期时间转换为任何其他时区,请使用astimezone 方法:

kolkata_datetime = localized_datetime.astimezone(kolkata)
print(kolkata_datetime)
# 1970-01-01 05:30:00+05:30

如果您需要将日期时间转换回时间元组,请使用 timetuple 方法:

kolkata_timetuple = kolkata_datetime.timetuple()
print(kolkata_timetuple)
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=5, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

【讨论】:

  • 感谢您提供非常具体的解释:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2021-11-10
  • 2018-03-24
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
相关资源
最近更新 更多