J'ai trois formats de date: YYYY-MM-DD
, DD.MM.YYYY
, DD/MM/YYYY
.
Est-il possible de valider et d’analyser des chaînes telles que 2014-05-18
ou 18.5.2014
ou 18/05/2019
?
Essayez chaque format et voyez si cela fonctionne:
from datetime import datetime
def try_parsing_date(text):
for fmt in ('%Y-%m-%d', '%d.%m.%Y', '%d/%m/%Y'):
try:
return datetime.strptime(text, fmt)
except ValueError:
pass
raise ValueError('no valid date format found')
>>> import dateutil.parser
>>> dateutil.parser.parse(date_string)
Cela devrait prendre en charge la plupart des formats de date standard dans Python 2.7+. Si vous avez vraiment des formats de date super personnalisés, vous pouvez toujours revenir à celui mentionné par Jon Clements.
Pur python:
from datetime import datetime
my_datetime = datetime.strptime('2014-05-18', '%Y-%m-%d')
repr(my_datetime)
>>> 'datetime.datetime(2014,5,18,0,0)'
Consultez la documentation sur le format datetime.strptime () pour plus de chaînes de format.
C’est un problème auquel j’étais confronté et c’est ainsi que j’ai abordé la question. Mon but principal était de séparer les dates.
class InputRequest:
"This class contain all inputs function that will be required in this program. "
def __init__(self, stockTickerName = 'YHOO', stockSite='yahoo', startDate = None,
endDate = datetime.date.today()):
def requestInput(self, requestType =''):
"Fro requesting input from user"
self.__requestInput = input(requestType)
return self.__requestInput
def dateFormat(self, dateType=''):
'''
this function handles user date input
this repeats until the correct format is supplied
dataType: this is the type of date, eg: DOF, Date of Arriveal, etc
'''
while True:
try:
dateString = InputRequest.requestInput(self,dateType)
dtFormat = ('%Y/%m/%d','%Y-%m-%d','%Y.%m.%d','%Y,%m,%d','%Y\%m\%d') #you can add extra formats needed
for i in dtFormat:
try:
return datetime.datetime.strptime(dateString, i).strftime(i)
except ValueError:
pass
except ValueError:
pass
print('\nNo valid date format found. Try again:')
print("Date must be seperated by either [/ - , . \] (eg: 2012/12/31 --> ): ")