تحليل هذا التاريخ في بيثون: 5 نوفمبر 2010
-
27-09-2019 - |
سؤال
أواجه وقتًا سيئًا مع تحليل التاريخ والتنسيق اليوم.
نقاط لشخص يمكنه تحليل تنسيق التاريخ هذا في 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 :)
لا تنتمي إلى StackOverflow