gpt4 book ai didi

python - 使 matplotlib 的 date2num 和 num2date 完美反转

转载 作者:行者123 更新时间:2023-11-28 21:26:15 25 4
gpt4 key购买 nike

我正在尝试编写一对函数,plottmunixtm,它们在正常 unix 时间(自 1970-01-01 以来的秒数)之间来回转换和 Matplotlib 的日期表示(从 -1BC 的最后一天开始的天数,一个 float )。

如果 plottmunixtm 是正确的逆函数,那么这段代码将打印相同的日期/时间两次:

import time, datetime
import matplotlib.dates as dt

# Convert a unix time u to plot time p, and vice versa
def plottm(u): return dt.date2num(datetime.datetime.fromtimestamp(u))
def unixtm(p): return time.mktime(dt.num2date(p).timetuple())

u = 1270000000
print datetime.datetime.fromtimestamp(u), "-->", \
datetime.datetime.fromtimestamp(unixtm(plottm(u)))

唉,它关闭了一个小时(这只发生在某些时间戳上,否则我会插入一个偏移量并完成它)。

可能相关:Problems with Localtime

更新:不特定于 Matplotlib 的相关问题:Convert a unixtime to a datetime object and back again (pair of time conversion functions that are inverses)

最佳答案

基于@dreeves 的回答,适用于时区感知日期时间的解决方案:

import matplotlib.dates as dt

from calendar import timegm
from datetime import datetime

from pytz import utc


# Convert a unix time u to plot time p, and vice versa
def plottm(u):
return dt.date2num(datetime.fromtimestamp(u, utc))

def unixtm(p):
return timegm(dt.num2date(p, utc).utctimetuple())


u = 1270000000
print datetime.fromtimestamp(u, utc), "-->", \
datetime.fromtimestamp(unixtm(plottm(u)), utc)

输出(针对多个时区进行测试):

2010-03-31 01:46:40+00:00 --> 2010-03-31 01:46:40+00:00

关于python - 使 matplotlib 的 date2num 和 num2date 完美反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com