将12小时格式转换为24小时Python

时间:2017-01-06 13:13:10

标签: python sqlite

输入数据来自CSV文件,其中日期格式为AM / PM,然后Pandas库用于将csv导出到sqlite数据库表。

是否有任何优雅的解决方案或内置函数用于python 2.7或3将这12小时日期转换为24小时格式,最好是在它们写入数据库之前?我需要它来比较将导入数据库的日期。

使用以下代码:

import pandas as pd
import datetime as dt

from sqlite3 import connect
from glob import iglob
from os.path import splitext, basename


dbName = 'logs'
logsDir = 'event_logs'

def csvToDb(db, filename):
    conn = connect(db)
    df = pd.read_csv(filename,encoding='utf-8')
    df.to_sql(splitext(basename(filename))[0], conn)
    conn.close()


def csvLogsToDb(directory):
    for filename in iglob(directory + '/*.csv'):
        print('WRITING TO DB | ' + filename)
        csvToDb(dbName, filename)

    print("DONE")


if __name__ == "__main__":
    csvLogsToDb(logsDir)

我删除了大部分数据并保持最相关,但简而言之,这是我当前的输入和所需的输出

输入CSV数据:

Level,DateTime    
Information,2017/01/06 9:06:02 AM
Information,2017/01/06 9:02:44 AM
Information,2017/01/06 8:56:48 PM

CURRENT OUTPUT

COL1    
    Information    
    Information
    Information

COL2
    2017/01/06 9:06:02 AM
    2017/01/06 9:02:44 AM
    2017/01/06 8:56:48 PM

预期输出

COL1
    Information
    Information
    Information

COL2
    2017-01-06 09:06:02
    2017-01-06 09:02:44
    2017-01-06 20:56:48

2 个答案:

答案 0 :(得分:2)

告诉pandas.read_csv()解析日期,请参阅datetime parsing options available

dateutil.parser默认解析器可以处理开箱即用的AM / PM时间。将parse_dates选项设置为要解析的列索引列表。对于您的示例输入,该列为1列:

>>> import pandas
>>> from io import BytesIO
>>> data = BytesIO(b'''\
... Level,DateTime
... Information,2017/01/06 9:06:02 AM
... Information,2017/01/06 9:02:44 AM
... Information,2017/01/06 8:56:48 PM
... ''')
>>> pandas.read_csv(data, parse_dates=[1])
         Level        DateTime
0  Information 2017-01-06 09:06:02
1  Information 2017-01-06 09:02:44
2  Information 2017-01-06 20:56:48

答案 1 :(得分:0)

您可以使用datetime包来完成此任务

from datetime import datetime
data = '2:35 PM'
standard_time_format = datetime.strptime(data, "%I:%M %p")
only_in_24_hour_format = datetime.strftime(standard_time_format, "%H:%M")
print only_in_24_hour_format
print standard_time_format

这会将以下内容作为输出

  

14时35分

     

1900-01-01 14:35:00