Python 获取当天小时的时间戳

Python 获取当天小时的时间戳,python,python-datetime,Python,Python Datetime,好的,我需要一种方法来获取当天的时间戳,但是在特定的时间 例如,我希望今天的unix时间戳是7:30PM,我该怎么做才能得到这个值?在PHP中,可以使用strotime()实现,但我不确定在Python中如何实现这一点 编辑:澄清一下,我指的是当天不是一个静态书写的日子。因此,如果我明天运行此脚本,它将返回明天晚上7:30的时间戳。您可以使用时间模块: from datetime import datetime now = datetime.utcnow() # Current time th

好的,我需要一种方法来获取当天的时间戳,但是在特定的时间

例如,我希望今天的unix时间戳是7:30PM,我该怎么做才能得到这个值?在PHP中,可以使用strotime()实现,但我不确定在Python中如何实现这一点


编辑:澄清一下,我指的是当天不是一个静态书写的日子。因此,如果我明天运行此脚本,它将返回明天晚上7:30的时间戳。

您可以使用时间模块:

from datetime import datetime

now = datetime.utcnow() # Current time
then = datetime(1970,1,1) # 0 epoch time
ts = now - then

ts = ts.days * 24 * 3600 + ts.seconds
# alternatively, per Martijn Pieters
ts = int(ts.total_seconds())
from datetime import datetime   
from time import mktime
# like said Ashoka
ts = datetime.strptime("2014-7-7 7:30","%Y-%m-%d %H:%M")
#you have now your datetime object
print mktime(ts.timetuple())
# print 1404711000.0
print int(mktime(ts.timetuple()))
# print 1404711000
请注意,mktime不关心时区,因此,如果您希望使用UTC时区但仍然使用时间,请在以下日期之前转换日期:

import pytz
fr = pytz.timezone('Europe/Paris')
#localize
ts = fr.localize(ts)
#timestamp in UTC
mktime(ts.astimezone(pytz.UTC).timetuple())
方法返回传递的时间元组之外的时间戳:

import calendar
from datetime import datetime

d = datetime(year=2014, month=7, day=8, hour=7, minute=30)
calendar.timegm(d.utctimetuple())
# 1404804600

datetime.utcfromtimestamp(calendar.timegm(d.utctimetuple()))
# datetime.datetime(2014, 7, 8, 7, 30)
重要的是
utctimetuple
utcfromtimestamp
。您当然需要UTC时间戳,而不是本地时区的时间戳

import calendar
from datetime import datetime
from pytz import timezone, utc

tz = timezone('Europe/Warsaw')
aware = datetime(year=2014, month=7, day=8, hour=7, minute=30)
aware = tz.localize(aware)
# datetime.datetime(2014, 7, 8, 7, 30, tzinfo=<DstTzInfo 'Europe/Warsaw' CEST+2:00:00 DST>)

stamp = calendar.timegm(aware.utctimetuple())
# 1404797400

d = datetime.utcfromtimestamp(stamp)
# datetime.datetime(2014, 7, 8, 5, 30)

d = d.replace(tzinfo=utc)
d.astimezone(tz)
# datetime.datetime(2014, 7, 8, 7, 30, tzinfo=<DstTzInfo 'Europe/Warsaw' CEST+2:00:00 DST>)
导入日历
从日期时间导入日期时间
从pytz导入时区,utc
tz=时区(“欧洲/华沙”)
aware=日期时间(年=2014,月=7,日=8,小时=7,分钟=30)
aware=tz.本地化(aware)
#datetime.datetime(2014,7,8,7,30,tzinfo=)
stamp=calendar.timegm(aware.utctimetuple())
# 1404797400
d=datetime.utcfromtimestamp(戳记)
#datetime.datetime(2014,7,8,5,30)
d=d.replace(tzinfo=utc)
d、 散光区(tz)
#datetime.datetime(2014,7,8,7,30,tzinfo=)

mktime
返回本地时间戳。您应该使用
calendar.timegm(datetime.utctimetuple())
。嗯,我不是舒尔,让我检查一下,但我认为如果您将tz指定为datetime,则返回UTC时间戳并不重要。时间元组不包含时区信息,仅限于是否为DST。你是对的,这是在日期时间的TZ中返回的,你可以指定TZ,让我edit@kroolik:但只有当您明确请求时,才能知道基准日期时间。在Python3.2之前,
datetime
模块甚至没有绑定时区。根据我的经验,任何使用时间戳的人都不会对时区过于挑剔。因此,这只是一个需要资格认证的警告;e、 g.除非您使用的是朴素的datetime对象,否则您希望使用UTC时间元组或类似的单词。这里有一个
ts.total_seconds()
方法更有用。Nifty不知道这一点。我把它扔了。UNIX时间戳并没有那么有用;这就是你真正需要的,还是一旦你有了时间戳,你需要对它做更多的事情?时间戳就是我所需要的,它在程序中被转换成各种字符串格式。但是UNIX时间戳对于标准格式来说是好的,我不同意。在一个Python程序中,
datetime
对象更加灵活和通用。就像
unicode
是更好、更通用的文本对象类型一样,您希望在整个代码中使用最佳表示,尽早解析为该类型,并且只在最后一刻转换为输出格式。这是一个公平的观点,我可以这样做(格式对我来说无关紧要,我只需要完成我在问题中陈述的内容)。您可以始终使用
datetime.time(19,30)
获取表示7:30PM的时间对象,然后将其与
datetime.date.today()
,例如,使用
datetime.datetime.combine()
,或使用
datetime.datetime.now().replace(hour=19,minute=30)
以获得相同的结果。然而
time.mktime(d.timetuple())
给出了完全相同的时间戳,因为对于一个朴素的datetime对象,两者都在同一时区中运行。@martijInputers,是的,但朴素的datetimes不是唯一的对象类型,只有当您实际添加时区时才是
utctimetuple()
重要。但这是一个重要的细微差别,您在其他评论中没有提到。@MartijnPieters,同样,
mktime
考虑了本地时区,因此它进一步修改输出时间戳(根据该时区)另一方面,timegm只接收timetuple并返回特定时间点的时间戳。