【问题标题】:Replace datetime characters in a string替换字符串中的日期时间字符
【发布时间】:2018-02-18 11:51:56
【问题描述】:

考虑以下日期示例str

'20180101,20180102,20180103,20180104,20180105,20180106,20180107,20180108,20180109,20180110,20180111,20180112,20180113,20180114,20180115,20180116,20180117,20180118,20180119,20180120,20180121,20180122,20180123,20180124,20180125,20180126,20180127,20180128,20180129,20180130,20180131,20180201,20180202,20180203,20180204,20180205,20180206,20180207,20180208'.

使用 .replace('2018','2018-') 或模块 re.sub('2018', '2018-', foo_string) 中的 re,日期更改为 2018-0101。但是,我想为一系列日期插入一个连字符。我尝试了以下re.sub('{}'.format(range(2018,2019)), '2018-', foo_string) 无济于事。返回的字符串没有任何更改。作为参考,我想为连字符指定的年份是 1981 年到 2018 年。

此外,我不确定在月份和日期之间以干净的方式插入连字符的方法。非常感谢您提供这些方向的帮助。

【问题讨论】:

  • 所以你希望20180101 成为2018-01-01
  • @heemayl 是的,所有日期都是这种格式。

标签: python string date replace


【解决方案1】:

我觉得用datetime会更pythonic,

from datetime import datetime

date_list = '20180101,20180102,20180103,20180104,20180105,20180106,20180107,20180108'

def new_date_format(old_format_str):
    date_format = datetime.strptime(old_format_str, '%Y%m%d')
    new_format = date_format.strftime("%Y-%m-%d")
    return new_format

for date_str in date_list.split(","):
    print(new_date_format(date_str))

这将产生以下输出:

2018-01-01
2018-01-02
2018-01-03
2018-01-04
2018-01-05
2018-01-06
2018-01-07
2018-01-08

【讨论】:

    【解决方案2】:

    我愿意

    def insert_hyphen(stri):
        return ",".join([date[:4]+"-"+date[4:] for date in stri.split(',')])
    

    如果你想要双连字符然后做

    def insert_hyphen(stri):
        return ",".join([date[:4]+"-"+date[4:6]+"-"+date[6:] for date in stri.split(',')])
    

    【讨论】:

    • 如果您将 KGSH 的答案与您的答案结合起来会更好,即 def insert_hyphen(stri): return ",".join([date[:4:] + '-' + date[4:6:] + '-' + date[6::] for date in stri.split(',')])
    【解决方案3】:

    如果您的列表包含日期,为什么不将您的列表存储为 日期?

    Python 有一个 datetime 模块,它有助于实现这一点:

    from datetime import datetime
    
    lst = '20180101,20180102'
    
    # first convert to datetime
    lst = [datetime.strptime(i, '%Y%M%d') for i in lst.split(',')]
    
    # define year combiner
    def year_range(lst, year_start, year_end):
        return [i.replace(year=j) for j in range(year_start, year_end+1) for i in lst]
    
    # make list for year range from lst
    lst = year_range(lst, 2015, 2018)
    
    # [datetime.datetime(2015, 1, 1, 0, 1),
    #  datetime.datetime(2016, 1, 1, 0, 1),
    #  datetime.datetime(2017, 1, 1, 0, 1),
    #  datetime.datetime(2018, 1, 1, 0, 1),
    #  datetime.datetime(2015, 1, 2, 0, 1),
    #  datetime.datetime(2016, 1, 2, 0, 1),
    #  datetime.datetime(2017, 1, 2, 0, 1),
    #  datetime.datetime(2018, 1, 2, 0, 1)]
    

    【讨论】:

      【解决方案4】:

      如果您确实需要使用 re 模块,您只需匹配数字序列并将它们替换为您发现与连字符混合的内容:

      import re
      
      string = '20180101,20180102,20180103,20180104,20180105,20180106,20180107,20180108,20180109,20180110,20180111,20180112,20180113,20180114,20180115,20180116,20180117,20180118,20180119,20180120,20180121,20180122,20180123,20180124,20180125,20180126,20180127,20180128,20180129,20180130,20180131,20180201,20180202,20180203,20180204,20180205,20180206,20180207,20180208'
      
      result = re.sub('([0-9]{4})([0-9]{2})([0-9]{2})','\\1-\\2-\\3',string,0)
      
      print(result)
      

      【讨论】:

        【解决方案5】:

        使用这个:

        string = '20180203'
        new_string = string[:4:] + '-' + string[4:6:] + '-' + string[6::]
        print (new_string)
        

        结果:

        2018-02-03

        请确保日期格式为 YYYYMMDD。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-04
          • 1970-01-01
          • 1970-01-01
          • 2019-03-04
          • 1970-01-01
          • 1970-01-01
          • 2022-08-18
          相关资源
          最近更新 更多