如何在python中将datetime转换为整数

时间:2015-01-26 16:15:42

标签: python datetime integer converter

如何在python中将YYYY-MM-DD hh:mm:ss格式转换为整数? 例如2014-02-12 20:51:14 - >到整数。

我知道如何只转换hh:mm:ss而不是 yyyy-mm-dd hh:mm:ss

def time_to_num(time_str):
    hh, mm , ss = map(int, time_str.split(':'))
    return ss + 60*(mm + 60*hh)

4 个答案:

答案 0 :(得分:10)

这取决于整数应该编码的内容。您可以将日期转换为之前某个时间的毫秒数。人们经常在1970年1月1日上午12点或1900年等时将其固定,并且从该点开始测量时间为整数毫秒。 datetime模块(或其他类似模块)将具有为您执行此操作的功能;只是谷歌转换为毫秒。

如果你想对年,月和日进行语义编码,一种方法是将这些组件乘以足够大的数量级值,以便将它们并置在整数位内:

2012-06-13 - > 20120613 = 10,000 *(2012)+ 100 *(6)+ 1 *(13)

def to_integer(dt_time):
    return 10000*dt_time.year + 100*dt_time.month + dt_time.day

E.g。

In [1]: import datetime

In [2]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:def to_integer(dt_time):
:    return 10000*dt_time.year + 100*dt_time.month + dt_time.day
:    # Or take the appropriate chars from a string date representation.
:--

In [3]: to_integer(datetime.date(2012, 6, 13))
Out[3]: 20120613

如果您还需要分钟和秒钟,则只需根据需要包含更多数量级以显示数字。

我在遗留系统中经常遇到第二种方法,特别是从遗留SQL数据库中提取基于日期的数据的系统。

非常糟糕。您最终编写了大量hacky代码来对齐日期,计算月份或日期偏移,因为它们将以整数格式显示(例如,当您通过12月时将月份重置为1,然后递增年份值),以及全部转换为整数格式。

除非这样的约定存在于您正在使用的API的深层次,低级且经过全面测试的部分中,否则每个使用数据的人都可以依赖此整数表示及其所有辅助函数然后你最终会有很多人在整个地方重写基本的日期处理程序。

通常情况下,尽可能将值保留在日期上下文中,例如datetime.date,以便对其进行操作,以自然的,基于日期的上下文表示,而不是一些孤独的开发人员的个人入侵整数。

答案 1 :(得分:1)

我想我有一个捷径:

# Importing datetime.
from datetime import datetime

# Creating a datetime object so we can test.
a = datetime.now()

# Converting a to string in the desired format (YYYYMMDD) using strftime
# and then to int.
a = int(a.strftime('%Y%m%d'))

答案 2 :(得分:1)

在一个示例中,该示例可用于提供数据库密钥,有时我使用而不是使用AUTOINCREMENT选项。

import datetime 

dt = datetime.datetime.now()
seq = int(dt.strftime("%Y%m%d%H%M%S"))

答案 3 :(得分:-1)

将日期时间转换为整数时,必须牢记数十,数百和数千....喜欢 “ 2018-11-03”必须像int中的20181103 为此,您必须 2018 * 10000 + 100 * 11 + 3

另一个例子 “ 2018-11-03 10:02:05”必须类似于int中的20181103100205

解释性代码

dt = datetime(2018,11,3,10,2,5)
print (dt)

#print (dt.timestamp()) # unix representation ... not useful when converting to int

print (dt.strftime("%Y-%m-%d"))
print (dt.year*10000 + dt.month* 100  + dt.day)
print (int(dt.strftime("%Y%m%d")))

print (dt.strftime("%Y-%m-%d %H:%M:%S"))
print (dt.year*10000000000 + dt.month* 100000000 +dt.day * 1000000 + dt.hour*10000  +  dt.minute*100 + dt.second)
print (int(dt.strftime("%Y%m%d%H%M%S")))

常规功能

为避免手动执行以下功能

def datetime_to_int(dt):
    return int(dt.strftime("%Y%m%d%H%M%S"))