【问题标题】:how to concat yesterday datetime and given hours, minutes in python?如何在 python 中连接昨天的日期时间和给定的小时、分钟?
【发布时间】:2020-07-20 00:13:08
【问题描述】:

我必须将字符串“昨天 14:56”转换为字符串“2020 年 7 月 19 日 14:56”。

如果是'today 13:20',则必须是字符串'20 july 2020 13:20'。

我有一个功能:

new_dates =[
['yesterday', '18:27'],
['today', '01:47'],
['yesterday', '21:45'],
['yesterday', '20:52'],
['yesterday', '19:48'],
['yesterday', '17:34'],
['yesterday', '14:50']]



from datetime import datetime as dd
import datetime as dt

    for d in new_dates:
            if d[0] == 'yesterday':
                date = dd.strptime(d[1], '%H:%M')
                t = date.strftime('%H:%M')
                t = t.split(':')
                hours = int(t[0])
                minutes = int(t[1])
    
                today = dt.date.today()
                yesterday = today - dt.timedelta(days=1, hours=hours, minutes=minutes)
                print( yesterday)

昨天应该有'2020-07-19 13:20'

但它只显示日期“2020-07-19”,没有小时和分钟。

【问题讨论】:

    标签: python datetime python-datetime timedelta


    【解决方案1】:

    首先将新日期转换为 ["today", '14', '57'] 之类的行,然后对所有日期执行此操作。

    然后我做了 3 次来回转换 btw datetime vs str 类型 - strftime 和 strptime。

    strftime - 将日期时间对象转换为字符串 strptime - 将字符串转换为日期时间

    def process_dates(dates):
        new_dates = []
        for d in dates:
            temp = d.split(',')
            temp[1] = temp[1].strip()
            temp[1] = temp[1].split(':')
            new_dates.append( [temp[0], temp[1][0], temp[1][1] ])
    
      
        final_dates = []
        for d in new_dates:
            if d[0] == "yesterday":
                today = dt.date.today()
    
                yesterday = today - dt.timedelta(days=1)
                res = yesterday.strftime("%d %B %Y, %H:%M")
                res = res.split(',')[0]
                res += ' ' +d[1] + ':' + d[2]
    
                new_dd = dd.strptime(res, '%d %B %Y %H:%M')
                new_dd = new_dd.strftime("%d %B %Y, %H:%M")
                final_dates.append(new_dd)            
            elif d[0]== 'today':
                today = dt.date.today()
                res = today.strftime("%d %B %Y, %H:%M")
                res = res.split(',')[0]
                res += ' ' +d[1] + ':' + d[2]
    
                new_dd = dd.strptime(res, '%d %B %Y %H:%M')
                new_dd = new_dd.strftime("%d %B %Y, %H:%M")
                final_dates.append(new_dd)
    
            for d in final_dates:
                print(d)
    

    输出:

    19 July 2020, 17:34
    19 July 2020, 18:27
    20 July 2020, 01:47
    19 July 2020, 21:45
    19 July 2020, 20:52
    19 July 2020, 19:48
    19 July 2020, 17:34
    19 July 2020, 14:50
    

    【讨论】:

      【解决方案2】:

      一个简单的映射dict怎么样?

      from datetime import datetime
      
      new_dates = [
          ['yesterday', '18:27'],
          ['today', '01:47'],
          ['yesterday', '21:45'],
          ['yesterday', '20:52'],
          ['yesterday', '19:48'],
          ['yesterday', '17:34'],
          ['yesterday', '14:50']
          ]
      
      mapping = {'today': '2020-07-20',
                 'yesterday': '2020-07-19'}
      
      dt_list = [
          datetime.strptime(mapping[l[0]]+l[1], '%Y-%m-%d%H:%M')
          for l in new_dates
          ]
      
      # dt_list
      # [datetime.datetime(2020, 7, 19, 18, 27),
      #  datetime.datetime(2020, 7, 20, 1, 47),
      #  datetime.datetime(2020, 7, 19, 21, 45),
      #  datetime.datetime(2020, 7, 19, 20, 52),
      #  datetime.datetime(2020, 7, 19, 19, 48),
      #  datetime.datetime(2020, 7, 19, 17, 34),
      #  datetime.datetime(2020, 7, 19, 14, 50)] 
      

      如果您希望输出是字符串而不是日期时间对象,请添加例如.strftime("%d %B %Y, %H:%M").

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-11
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多