问题:Python将来五分钟创建unix时间戳
我必须在将来的5分钟内创建一个“ Expires”值,但是我必须以UNIX Timestamp格式提供它。到目前为止,我已经掌握了这个功能,但似乎有点。
def expires():
'''return a UNIX style timestamp representing 5 minutes from now'''
epoch = datetime.datetime(1970, 1, 1)
seconds_in_a_day = 60 * 60 * 24
five_minutes = datetime.timedelta(seconds=5*60)
five_minutes_from_now = datetime.datetime.now() + five_minutes
since_epoch = five_minutes_from_now - epoch
return since_epoch.days * seconds_in_a_day + since_epoch.seconds
是否有为我转换时间戳的模块或功能?
回答 0
另一种方法是使用calendar.timegm
:
future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
return calendar.timegm(future.timetuple())
它比%s
标记为strftime
(在Windows上不起作用)更可移植。
回答 1
现在,在Python> = 3.3中,您只需调用timestamp()方法即可将时间戳记作为浮点数获取。
import datetime
current_time = datetime.datetime.now(datetime.timezone.utc)
unix_timestamp = current_time.timestamp() # works if Python >= 3.3
unix_timestamp_plus_5_min = unix_timestamp + (5 * 60) # 5 min * 60 seconds
回答 2
刚发现,它甚至更短。
import time
def expires():
'''return a UNIX style timestamp representing 5 minutes from now'''
return int(time.time()+300)
回答 3
这是您需要的:
import time
import datetime
n = datetime.datetime.now()
unix_time = time.mktime(n.timetuple())
回答 4
您可以使用datetime.strftime
以下%s
格式的字符串以Epoch格式获取时间:
def expires():
future = datetime.datetime.now() + datetime.timedelta(seconds=5*60)
return int(future.strftime("%s"))
注意:此方法仅在linux下有效,而此方法不适用于时区。
回答 5
这是一个datetime
从日期时间对象转换为posix时间戳记的基于基础的解决方案:
future = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
return (future - datetime.datetime(1970, 1, 1)).total_seconds()
在Python中将datetime.date转换为UTC时间戳,请参见更多详细信息。
回答 6
def in_unix(input):
start = datetime.datetime(year=1970,month=1,day=1)
diff = input - start
return diff.total_seconds()
回答 7
关键是在开始转换之前,确保您使用的所有日期都在utc时区中。请参阅http://pytz.sourceforge.net/了解如何正确执行此操作。通过对utc进行标准化,可以消除夏令时转换的歧义。然后,您可以安全地使用timedelta来计算距Unix纪元的距离,然后将其转换为秒或毫秒。
请注意,生成的unix时间戳本身就是UTC时区。如果您希望查看本地化时区中的时间戳,则需要进行另一次转换。
另请注意,这仅适用于1970年之后的日期。
import datetime
import pytz
UNIX_EPOCH = datetime.datetime(1970, 1, 1, 0, 0, tzinfo = pytz.utc)
def EPOCH(utc_datetime):
delta = utc_datetime - UNIX_EPOCH
seconds = delta.total_seconds()
ms = seconds * 1000
return ms
回答 8
以下内容基于上述答案(加上毫秒数的更正),并datetime.timestamp()
在使用时区时针对3.3之前的Python 3进行了仿真。
def datetime_timestamp(datetime):
'''
Equivalent to datetime.timestamp() for pre-3.3
'''
try:
return datetime.timestamp()
except AttributeError:
utc_datetime = datetime.astimezone(utc)
return timegm(utc_datetime.timetuple()) + utc_datetime.microsecond / 1e6
要严格按照要求回答问题,您需要:
datetime_timestamp(my_datetime) + 5 * 60
datetime_timestamp
是simple-date的一部分。但是,如果您使用的是该软件包,则可能要输入:
SimpleDate(my_datetime).timestamp + 5 * 60
可以为my_datetime处理更多格式/类型。
回答 9
def expiration_time():
import datetime,calendar
timestamp = calendar.timegm(datetime.datetime.now().timetuple())
returnValue = datetime.timedelta(minutes=5).total_seconds() + timestamp
return returnValue
回答 10
请注意,timedelta.total_seconds()
适用于python-2.7 +的解决方案。使用calendar.timegm(future.utctimetuple())
较低版本的Python。