从日期时间转换为python中的日期字符串

时间:2018-03-10 23:59:03

标签: python python-2.7 datetime

我的代码需要一些帮助。从数据库中提取字符串后,我已将title: {1: [1, 3, 5, 6, 2, 4], 2: [], 3: []} 对象存储到列表中。现在我想将它转换为字符串。

示例:

datetime

对此:

datetime.datetime(2018, 3, 12, 0, 0)

如果我想将12/03/2018 12:00AM 对象转换为字符串以使其显示datetime,我将不得不使用以下内容:

12/03/2018 12:00AM

以下是我从数据库中提取数据后在self.program_end_date列表中存储日期时间的内容:

program_stop_date = '20180312000000'
stop_time = time.strptime(program_stop_date, '%Y%m%d%H%M%S')
stop_time = datetime.datetime.fromtimestamp(time.mktime(stop_time))
program_stop_hours = str(stop_time.hour)
program_stop_minutes = str(stop_time.minute)
program_stop_days = int(stop_time.day)
program_stop_months = int(stop_time.month)
program_stop_year = str(stop_time.year)
program_stop_hours = int(program_stop_hours)

if program_stop_minutes == "0":
   program_stop_minutes = "00"
elif program_stop_minutes == "5":
   program_stop_minutes = "05"

if program_stop_hours >= 0 and program_stop_hours <= 9:
   program_stop_hours = str(program_stop_hours)
   program_stop_hours = str("0" + program_stop_hours)

if program_stop_days >= 0 and program_stop_days <= 9:
   program_stop_days = str(program_stop_days)
   program_stop_days = str("0" + program_stop_days)

if program_stop_months >= 0 and program_stop_months <= 9:
   program_stop_months = str(program_stop_months)
   program_stop_months = str("0" + program_stop_months)
program_stop_hours = int(program_stop_hours)
program_stop_days = str(program_stop_days)
program_stop_months = str(program_stop_months)


if program_stop_hours >= 00 and program_stop_hours <= 12:
    program_AM_PM = 'AM'
else:
    program_AM_PM = 'PM'

 program_stop_hours = str(program_stop_hours)
 program_stop_times = str(program_stop_hours + ':' + program_stop_minutes + program_AM_PM)
 program_end_time = str(program_stop_days + "/" + program_stop_months + "/" + program_stop_year + " " + program_stop_times)

我想将cur.execute('SELECT start_date, stop_date, title, program_id FROM programs WHERE program_id=? LIMIT 10', [program_id]) programs = cur.fetchall() for ind, row in enumerate(programs): program_stop_date = str(row[1]) stop_time = time.strptime(program_stop_date, '%Y%m%d%H%M%S') program_stop_times = time.strftime('%d/%m/%Y %H:%M%p', stop_time) program_stop_time = time.strptime(program_stop_times, '%d/%m/%Y %H:%M%p') self.program_end_time = list() self.program_end_time.append(program_stop_time) 对象转换为字符串的原因是因为我想将它从字符串转换为datetime对象,如下所示:

time.struct_time

我认为没有必要,但我不知道如何从program_stop_times = '12/03/2018 12:00AM' program_stop_time = time.strptime(program_stop_times, '%d/%m/%Y %I:%M%p') 转换为datetime对象。这是我能想到的唯一方法,就像我在顶部显示的代码一样,将time.struct_time转换为字符串然后转换为datetime

您能否请您举例说明如何将time.struct_time对象转换为字符串以使其显示datetime或使用比我可以使用的更好的方式?

1 个答案:

答案 0 :(得分:1)

关注您的具体示例,您可以通过3个步骤将字符串转换为time.struct_time对象:

  1. 在下面的示例中将str转换为datetimex
  2. datetime转换为datey
  3. date转换为time.struct_timez
  4. 下面,为方便起见,我使用dateutil.parser.parse作为第1步。

    from dateutil import parser
    from datetime import datetime
    
    program_stop_times = '12/03/2018 12:00AM'
    
    x = parser.parse(program_stop_times)
    y = x.date()
    z = y.timetuple()
    
    # time.struct_time(tm_year=2018, tm_mon=12, tm_mday=3, tm_hour=0, tm_min=0,
    #                  tm_sec=0, tm_wday=0, tm_yday=337, tm_isdst=-1)
    

    您可以,也许应该将这些链接在一个功能中:

    def str_timestruct(x):
        return parser.parse(x).date().timetuple()