如何将格式为“%d/%m/%Y”的字符串转换为时间戳?

"01/12/2011" -> 1322697600

当前回答

我使用ciso8601,它比datetime的strptime快62倍。

t = "01/12/2011"
ts = ciso8601.parse_datetime(t)
# to get time in seconds:
time.mktime(ts.timetuple())

你可以在这里了解更多。

其他回答

首先,必须使用strptime类将字符串转换为struct_time格式。

然后使用mktime从那里得到你的浮点数。

答案也取决于你输入的日期和时区。如果你的日期是本地日期,那么你可以像katrielalex说的那样使用mktime() -只是我不明白为什么他使用datetime而不是这个更短的版本:

>>> time.mktime(time.strptime('01/12/2011', "%d/%m/%Y"))
1322694000.0

但是请注意,我的结果与他的结果不同,因为我可能在不同的TZ中(结果是无时区的UNIX时间戳)

现在如果输入日期已经是UTC,那么我认为正确的解决方案是:

>>> calendar.timegm(time.strptime('01/12/2011', '%d/%m/%Y'))
1322697600

一个获取UNIX纪元时间的简单函数。

注意:此函数假设输入日期时间为UTC格式(请参阅此处的注释)。

def utctimestamp(ts: str, DATETIME_FORMAT: str = "%d/%m/%Y"):
    import datetime, calendar
    ts = datetime.datetime.utcnow() if ts is None else datetime.datetime.strptime(ts, DATETIME_FORMAT)
    return calendar.timegm(ts.utctimetuple())

用法:

>>> utctimestamp("01/12/2011")
1322697600
>>> utctimestamp("2011-12-01", "%Y-%m-%d")
1322697600

我想给初学者(像我一样)一个答案:

你有日期字符串“01/12/2011”。然后可以按照“%d/%m/%Y”的格式编写。如果你想格式化成另一种格式,比如“2015年7月9日”,这里有一个很好的备忘单。

导入datetime库。 使用datetime。Datetime类来处理日期和时间组合。 使用strptime方法将字符串datetime转换为对象datetime。 最后,使用timestamp方法以浮点形式获取Unix纪元时间。所以,

import datetime
print( int( datetime.datetime.strptime( "01/12/2011","%d/%m/%Y" ).timestamp() ) )

# prints 1322712000

似乎相当有效:

import datetime
day, month, year = '01/12/2011'.split('/')
datetime.datetime(int(year), int(month), int(day)).timestamp()

1.61µs±120 ns /循环(7次运行的平均值±标准值,每次100000次循环)