将python aware datetime转换为本地timetuple

时间:2018-03-21 04:58:50

标签: python datetime epoch python-datetime

我有一个知道datetime对象:

dt = datetime.datetime.now(pytz.timezone('Asia/Ho_Chi_Minh'))

我使用它将对象转换为时间戳,目前运行正常:

int(time.mktime(dt.utctimetuple()))

但根据time docstime.mktime需要本地timetuple,而非UTC timetuple。如何从知道timetuple获取本地datetime?或者是使用timestamp代替time.mktime的任何其他方法吗?

我已阅读此问题,似乎我应该使用calendar.timegm(dt.utctimetuple())Converting datetime to unix timestamp

2 个答案:

答案 0 :(得分:1)

如果你有一个知道的日期时间,你可以通过减去UTC世纪的日期时间将其转换为unix纪元时间戳,如:

代码:

import datetime as dt
import pytz

def aware_to_epoch(aware):
    # get a datetime that is equal to epoch in UTC
    utc_at_epoch = pytz.timezone('UTC').localize(dt.datetime(1970, 1, 1))

    # return the number of seconds since epoch
    return (aware - utc_at_epoch).total_seconds()

aware = dt.datetime.now(pytz.timezone('Asia/Ho_Chi_Minh'))
print(aware_to_epoch(aware))

结果:

1521612302.341014

答案 1 :(得分:-1)

似乎你对你想要的东西感到困惑。

根据您的评论,答案在python datetime文档中:

  

没有方法直接从表示UTC时间的天真日期时间实例获取POSIX时间戳。如果您的应用程序使用此约定并且您的系统时区未设置为UTC,则可以通过提供tzinfo = timezone.utc来获取POSIX时间戳:

timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
     

或直接计算时间戳:

     

timestamp =(dt - datetime(1970,1,1))/ timedelta(seconds = 1)