将Python DateTime字符串转换为整数毫秒
作者:互联网
我想将UTC TimeDate标记字符串转换为毫秒的整数值(可能需要为64位数量),以便在存储在mySQL数据库列中时占用较少的空间.这个UTC字符串是从另一个库中生成的,我将其存储为一种针对每个用户的GUID.
可以将datetime或dateutil转换为单个整数值(例如“自纪元以来的毫秒数”)吗?还是我需要自己做?
使用这种方法进行解析:
myDateTime = dateutil.parser.parse("2015-06-27T02:10:05.653000Z")
print("Parsed datetime String is {0}, ordinal value is {1}".format(myDateTime, myDateTime.toordinal()))
给出输出:
Parsed datetime String is 2015-06-27 02:10:05.652999+00:00, ordinal value is 735776
…仅给出日期的序数值.此外,如果我的时间是653毫秒的整数,那么我希望该解析对象知道它具有653毫秒,而不是652999.
解决方法:
[根据评论中的建议进行编辑]
使用Ben Alpert’s回答How can I convert a datetime object to milliseconds since epoch (unix time) in Python,我们可以执行以下操作:
from datetime import datetime
def unix_time(dt):
epoch = datetime.utcfromtimestamp(0)
delta = dt - epoch
return delta.total_seconds()
def unix_time_millis(dt):
return int(unix_time(dt) * 1000)
a = datetime.strptime("2015-06-27T02:10:05.653000Z", "%Y-%m-%dT%H:%M:%S.%fZ")
unix_time_millis(a)
收益:
1435371005653
等效于:2015年6月27日,星期六,格林尼治标准时间(如预期)
我们还可以使用datetime的.strftime(‘%s’)来获取Unix时间,甚至可以使用以下命令获取毫秒(但不建议这样做):
from decimal import Decimal
int(Decimal(datetime.strptime("2015-06-27T02:10:05.653000Z", "%Y-%m-%dT%H:%M:%S.%fZ").strftime('%s.%f'))*1000)
收益:
1435396205653
相当于:2015年6月27日,星期六,格林尼治标准时间(在我位于圣地亚哥的Mac上;请注意:这比我们预期的要晚7个小时).
J.F. Sebastian在上面的链接的注释中以及在有关.strftime(‘%s’)行为的this回答中描述了错误的原因.塞巴斯蒂安·J.F.塞巴斯蒂安指出:“它不受支持,它不是可移植的,它可能会为一个已知的日期时间对象默默地产生错误的结果,如果输入使用UTC(如在问题中),但本地时区不是UTC,它将失败”
标签:python,mysql,datetime,python-2-7,datetime-format 来源: https://codeday.me/bug/20191010/1885203.html