2014-05-10 15 views
11

Tôi có ba định dạng ngày: YYYY-MM-DD, DD.MM.YYYY, DD/MM/YYYY.Cách định dạng chuỗi ngày qua nhiều định dạng trong python

Có thể xác thực và phân tích cú pháp các chuỗi như 2014-05-18 hoặc 18.5.2014 hoặc 18/05/2019 không?

+1

Bạn đã nhìn [dateutil] (https://labix.org/python- dateutil) - thất bại - chỉ cần thử 'strptime'ing mỗi 3 lần lượt để xem chúng có hoạt động hay không ... –

+1

Cảm ơn bạn đã bình luận. Tôi muốn sử dụng python tinh khiết mà không có libs bên thứ ba –

Trả lời

46

Hãy thử mỗi định dạng và xem nếu nó hoạt động:

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') 
+1

Điều cuối cùng là'% y'. Nên là '% Y'. –

+1

@Vaibhav điểm tốt - chỉnh sửa - cảm ơn. –

0

tinh khiết 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)' 

Kiểm tra datetime.strptime() tài liệu Định dạng cho nhiều định dạng chuỗi.

+0

Giải pháp cần được mở rộng để sử dụng tất cả các định dạng ngày tháng và giải thích cách chọn giải pháp phù hợp. –

+0

@HansKhi bạn nói đúng, nhưng câu trả lời ở trên đã trả lời đúng câu hỏi và không có gì để thêm vào câu hỏi đó. –

+0

Vâng, rất khó để cải thiện khi @Jon Clements. –

6
>>> import dateutil.parser 
>>> dateutil.parser.parse(date_string) 

Điều này sẽ chăm sóc hầu hết các định dạng ngày chuẩn trong Python 2.7+. Nếu bạn thực sự có định dạng ngày siêu tùy chỉnh, bạn luôn có thể quay lại định dạng được Jon Clements đề cập.

0

Đây thực sự là một vấn đề tôi đã phải đối mặt với và điều này làm thế nào tôi tiến lại gần nó, mục đích chính của tôi là để các seperators ngày

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 -->): ") 
Các vấn đề liên quan