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

How to convert datetime to integer in python

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

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

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


它取决于整数应该编码什么。您可以将日期从以前的某个时间转换为毫秒数。人们通常在1970年1月1日上午12:00或1900等时间点进行此操作,并以从该点开始的整数毫秒来度量时间。datetime模块(或其他类似的模块)将为您提供这样的功能;只需谷歌搜索转换为毫秒。

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

2012-06-13——>20120613=10000*(2012)+100*(6)+1*(13)

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

例如。

1
2
3
4
5
6
7
8
9
10
11
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数据库中提取基于日期的数据的系统。

很糟糕。最后,你编写了大量用于调整日期、计算月份或日期偏移量的黑客代码,它们将以整数格式显示(例如,当你通过12月时,将月份重置为1,然后增加年份值),以及用于转换为整数格式和从整数格式转换为整数格式的锅炉盘。

除非这样一个约定存在于您正在处理的API的一个深入、低级和经过彻底测试的部分中,这样每个使用数据的人都可以真正依赖于这个整数表示和它的所有助手函数,否则最终会有很多人在各地重新编写基本的日期处理例程。

一般来说,最好在日期上下文中保留该值,如datetime.date,尽可能长的时间,以便在自然的、基于日期的上下文中表示对该值的操作,而不是将某个开发人员的个人黑客行为转换为整数。


我想我有个捷径:

1
2
3
4
5
6
7
8
9
# 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'))