سؤال

أواجه وقتًا سيئًا مع تحليل التاريخ والتنسيق اليوم.

نقاط لشخص يمكنه تحليل تنسيق التاريخ هذا في datetime.date أو datetime.datetime (أنا لست صعبًا جدًا ولكني أفضل .date):

5th November 2010

هل كانت مفيدة؟

المحلول

استخدام DateUtil:

In [2]: import dateutil.parser as dparser

In [3]: date = dparser.parse('5th November 2010')

In [4]: date
Out[4]: datetime.datetime(2010, 11, 5, 0, 0)

نصائح أخرى

للأسف، strptime لا يوجد لديه أحرف تنسيق لـ "تخطي لاحقة ترتيبية" - لذا ، سأقوم بالتخطي أولاً ، مع القليل من إعادة ، ثم تحليل السلسلة "الواضحة" الناتجة. بمعنى آخر:

>>> import re
>>> import datetime
>>> ordn = re.compile(r'(?<=\d)(st|nd|rd|th)\b')
>>> def parse(s):
...   cleans = ordn.sub('', s)
...   dt = datetime.datetime.strptime(cleans, '%d %B %Y')
...   return dt.date()
... 
>>> parse('5th November 2010')
datetime.date(2010, 11, 5)

تفضيلك ل date ضد datetime لا توجد مشكلة بالطبع ، هذا ما .date() طريقة datetime الكائنات هي ل ؛-).

امتدادات الطرف الثالث مثل DateUtil يمكن أن يكون مفيدًا إذا كنت بحاجة إلى القيام بالكثير من تحليل التاريخ "الغامض" (أو غيرها من الأشياء المتعلقة بالتاريخ الهوى ؛-) ، بالمناسبة.

إذا كان الترتيب ثابتًا ثم:

datetime.strptime(s, '%dth %B %Y')

آخر:

date_str = '5th November 2010'
modified_date_str = date_str[0:1] + date_str[3:]
datetime.strptime(modified_date_str, '%d %B %Y')

أو مثل قال unutbu استخدم DateUtil :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top