编程语言
首页 > 编程语言> > 将Python DateTime字符串转换为整数毫秒

将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