Форматирование строки даты в Python

#python #python-3.x #string #date

#python #python-3.x #строка #Дата

Вопрос:

В настоящее время я изучаю форматирование строки Python. Я столкнулся с проблемой

У меня есть строка

 s = "25Aug20"
  

Я хочу получить дату, месяц и год отдельно

 sp_list = ['25', 'Aug', '20']
  

Ответ №1:

Вы можете использовать нарезку:

 sp_list = [s[:2], s[2:5], s[5:]]
  

Если вы хотите получить фактический datetime объект, используйте .strptime() :

 from datetime import datetime

s = "25Aug20"
print(datetime.strptime(s, "%d%b%y"))
  

это выведет

 2020-08-25 00:00:00
  

Комментарии:

1. Можете ли вы помочь мне преобразовать ее в 25-08-2020?

2. Если вы хотите получить форматированную строку (т. Е. "25-08-2020" ), Используйте mydatetime.strftime("%d-%m-%Y") .

Ответ №2:

Вы можете использовать нарезку, как уже упоминалось в другом ответе, но я добавлю, что если есть какая-либо возможность, что вам также может потребоваться обрабатывать строки, которые используют только один символ при работе с однозначными датами, например, '5Aug20' (вместо '05Aug20' или ' 5Aug20' ), тогда я предлагаю нарезать относительно конца строки, чтобы обеспечить допуск к этому:

 sp_list = [s[:-5], s[-5:-2], s[-2:]]
  

Это должно работать всегда, при условии только, что количество символов, используемых для года, всегда равно 2, а количество символов, используемых для месяца, всегда равно 3.

Ответ №3:

Вы также можете использовать регулярное выражение

Пример:

 import re

s="25Aug20"
print(re.match(r"(d )([A-Za-z] )(d )", s).groups())
# -->('25', 'Aug', '20')
  

Ответ №4:

Вы можете добиться этого без использования datetime и slicing

 s = "25Aug20"

month = ''.join(char for char in s if char.isalpha())
res = s.replace(month, f' {month} ').split()
print(res)
  

Вывод:

 ['25', 'Aug', '20']