我正在尝试编写一对函数,dt并且ut在正常的unix时间(自1970-01-01 00:00:00 UTC以来的秒数)和Python datetime对象之间来回转换.
如果dt并且ut是正确的反转,则此代码将打印两次相同的时间戳:
import time, datetime
# Convert a unix time u to a datetime object d, and vice versa
def dt(u): return datetime.datetime.fromtimestamp(u)
def ut(d): return time.mktime(d.timetuple())
u = 1004260000
print u, "-->", ut(dt(u))
Run Code Online (Sandbox Code Playgroud)
唉,第二个时间戳比第一个时间戳少3600秒(一小时).我认为这只发生在非常特殊的unixtimes上,也许在那个时间里,夏令时会跳过.但有没有办法写作dt,ut所以他们是彼此真正的逆转?
请帮我将datetime对象(例如: 2011-12-17 11:31:00-05:00)(包括时区)更改为Unix时间戳(如Python中的函数time.time()).
为了清楚,这是python 2.6,我正在使用pytz.
这是针对仅处理美国时区的应用程序,我需要能够锚定日期(今天),并且仅在太平洋标准时间晚上8点和晚上11点获得unix时间戳(纪元时间).
这真让我抓狂.
> pacific = pytz.timezone("US/Pacific")
> datetime(2011,2,11,20,0,0,0,pacific)
datetime.datetime(2011, 2, 11, 20, 0, tzinfo=<DstTzInfo 'US/Pacific' PST-1 day, 16:00:0 STD>)
> datetime(2011,2,11,20,0,0,0,pacific).strftime("%s")
'1297454400'
zsh> date -d '@1297454400'
Fri Feb 11 12:00:00 PST 2011
Run Code Online (Sandbox Code Playgroud)
因此,即使我正在设置时区,并使用该时区创建日期时间,它仍然将其创建为UTC然后转换它.这是一个更大的问题,因为当我尝试进行计算时,UTC将会提前一天.
是否有一种简单(或至少是敏感)的方式来生成今天太平洋标准时间晚上8点的时间戳?
(很明显,我确实理解在大多数情况下使用UTC的价值,比如数据库时间戳,或者用于一般存储.这不是其中一种情况,我特别需要PST的晚上时间戳,UTC不应该进入它.)
我想把两次加在一起.ISO 8601时间戳是'1984-06-02T19:05:00.000Z',我想将其转换为秒.我尝试使用Python模块iso8601,但它只是一个解析器.
有什么建议?
我的问题:我需要将UTC时间元组转换为UTC时间戳.但我有一些困惑.
首先是一点信息:
time.mktime(tuple):此函数始终以本地时间返回时间戳.
这是localtime()的反函数.它的参数是struct_time或完整的9元组,它以当地时间而不是UTC表示时间.
calendar.timegm(tuple):这将从提供的时间元组返回UTC时间戳
获取时间模块中的gmtime()函数返回的时间元组,并返回相应的Unix时间戳值.事实上,time.gmtime()和timegm()彼此是反向的
现在让我们做一个测试:
>>> from datetime import datetime
>>> import time
>>> import calendar as cal
>>> utc_now = datetime.utcnow()
>>> now = datetime.now()
>>> utc_now
datetime.datetime(2013, 3, 16, 9, 17, 22, 489225)
>>> now
datetime.datetime(2013, 3, 16, 5, 17, 29, 736903)
>>> time.mktime(datetime.timetuple(utc_now)), time.mktime(datetime.timetuple(now))
(1363439842.0, 1363425449.0)
>>> cal.timegm(datetime.timetuple(utc_now)), cal.timegm(datetime.timetuple(now))
(1363425442, 1363411049)
Run Code Online (Sandbox Code Playgroud)
为什么有四种不同的价值观?当我想将UTC时间元组转换为UTC时间戳时,哪一个是正确的?
UPDATTE
我想我找到了我的困惑的答案,所以让我解释一下.
首先,我们需要知道重要的事情:
日期和时间对象有两种:"天真"和"意识".
知晓对象具有足够的适用算法和政治时间调整知识,例如时区和夏令时信息,以相对于其他知晓对象定位自身.知觉对象用于表示不对解释开放的特定时刻[1].
一个天真的对象不包含足够的信息来明确地相对于其他日期/时间对象定位自己.天真物体是代表协调世界时(UTC),当地时间还是某个其他时区的时间完全取决于程序,就像程序一样,特定数字代表米,英里或质量.天真的物体易于理解和使用,代价是忽略了现实的某些方面.
我们得到什么datetime.utcnow() 或是datetime.now()"天真"的对象.这意味着,datetime …
我想将GMT时间转换为EST时间并获得时间戳.我尝试了以下但不知道如何设置时区.
time = "Tue, 12 Jun 2012 14:03:10 GMT"
timestamp2 = time.mktime(time.strptime(time, '%a, %d %b %Y %H:%M:%S GMT'))
Run Code Online (Sandbox Code Playgroud) 我想将字符串日期格式转换为微秒的时间戳我尝试以下但不给出预期的结果:
"""input string date -> 2014-08-01 04:41:52,117
expected result -> 1410748201.117"""
import time
import datetime
myDate = "2014-08-01 04:41:52,117"
timestamp = time.mktime(datetime.datetime.strptime(myDate, "%Y-%m-%d %H:%M:%S,%f").timetuple())
print timestamp
> 1410748201.0
Run Code Online (Sandbox Code Playgroud)
毫秒在哪里?
我正试图从雅虎获取股票数据!财务使用Python 2.7.9,但我只需要本月第3个星期五的数据.我有一个获取数据的功能,但需要一种方法来获取日期.我想要这样的东西:
def get_third_fris(how_many):
# code and stuff
return list_of_fris
Run Code Online (Sandbox Code Playgroud)
因此,该呼叫get_third_fris(6)将在当前日期之后返回6个项目长的第3个星期五列表.日期需要是Unix时间戳.
(我有几乎没有经验time或者datetime,请解释一下你的代码做什么.)
谢谢!
我正在将国家气象服务警报提要解析为Web应用程序.我想在达到到期时清除警报.我还想以他们所属的地理区域的本地时间格式显示到期时间.
警报覆盖整个美国,所以我认为最好的方法是存储和比较UTC时间戳的时间.到期时间作为字符串到达Feed中,如下所示:2011-09-09T22:12:00-04:00.
我正在使用Labix dateutils包以时区感知的方式解析字符串:
>>> from dateutil.parser import parse
>>> d = parse("2011-09-18T15:52:00-04:00")
>>> d
datetime.datetime(2011, 9, 18, 15, 52, tzinfo=tzoffset(None, -14400))
Run Code Online (Sandbox Code Playgroud)
我还能够在几小时内捕获UTC偏移量:
>>> offset_hours = (d.utcoffset().days * 86400 + d.utcoffset().seconds) / 3600
>>> offset_hours
-4
Run Code Online (Sandbox Code Playgroud)
使用datetime.utctimetuple()和time.mktime()方法,我能够将解析的日期转换为UTC时间戳:
>>> import time
>>> expiration_utc_ts = time.mktime(d.utctimetuple())
>>> expiration_utc_ts
1316393520.0
Run Code Online (Sandbox Code Playgroud)
在这一点上,我感觉非常好,我能够将原始字符串转换为表示UTC中的到期时间的时间戳.我能够将当前时间作为UTC时间戳与到期时间进行比较,并确定是否需要清除它:
>>> now_utc_ts = time.mktime(time.gmtime())
>>> now_utc_ts
1316398744.0
>>> now_utc_ts >= expiration_tc_ts
True
Run Code Online (Sandbox Code Playgroud)
我遇到的困难是尝试将存储的UTC时间戳转换回原始的本地化格式.我有从原始转换存储的偏移小时数和我解析的字符串来存储时区标签:
>>> print offset_hours
-4
>>> print timezone
EDT
Run Code Online (Sandbox Code Playgroud)
我想将UTC时间戳转换回本地格式化的时间,但将其转换回a时datetime似乎不起作用: …
我正在寻找一个类似于np.interp可以处理datetime对象的功能.
例如:
import datetime, numpy as np
arr1 = np.array([datetime.datetime(2008,1,d) for d in range(1,10)])
arr2 = np.arange(1,10)
np.interp(datetime.datetime(2008,1,5,12),arr1,arr2)
Run Code Online (Sandbox Code Playgroud)
理想情况下会回归5.5,但numpy会加注TypeError: array cannot be safely cast to required type.这周围有一种不错的pythonic方式吗?