diff options
author | Philipp Hagemeister <phihag@phihag.de> | 2013-04-27 20:26:42 +0200 |
---|---|---|
committer | Philipp Hagemeister <phihag@phihag.de> | 2013-04-27 20:26:42 +0200 |
commit | 81df121dd3497a9a00fc76a58d667b5afef3b8d1 (patch) | |
tree | e3fa1ce940594d86ed83a10ac70862ae77759619 /youtube_dl/utils.py | |
parent | 50f6412eb86dfd215e1be8de12207e1cf055be23 (diff) | |
parent | bf50b0383e4d6728bbbf1d0ee70cf586a90efb40 (diff) |
Merge branch 'master' of github.com:rg3/youtube-dl
Diffstat (limited to 'youtube_dl/utils.py')
-rw-r--r-- | youtube_dl/utils.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 017f06c42..3a2f0022f 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -12,6 +12,7 @@ import traceback import zlib import email.utils import json +import datetime try: import urllib.request as compat_urllib_request @@ -568,3 +569,47 @@ class YoutubeDLHandler(compat_urllib_request.HTTPHandler): https_request = http_request https_response = http_response + +def unified_strdate(date_str): + """Return a string with the date in the format YYYYMMDD""" + upload_date = None + #Replace commas + date_str = date_str.replace(',',' ') + # %z (UTC offset) is only supported in python>=3.2 + date_str = re.sub(r' (\+|-)[\d]*$', '', date_str) + format_expressions = ['%d %B %Y', '%B %d %Y', '%b %d %Y', '%Y-%m-%d', '%d/%m/%Y', '%Y/%m/%d %H:%M:%S'] + for expression in format_expressions: + try: + upload_date = datetime.datetime.strptime(date_str, expression).strftime('%Y%m%d') + except: + pass + return upload_date + +def date_from_str(date_str): + """Return a datetime object from a string in the format YYYYMMDD""" + return datetime.datetime.strptime(date_str, "%Y%m%d").date() + +class DateRange(object): + """Represents a time interval between two dates""" + def __init__(self, start=None, end=None): + """start and end must be strings in the format accepted by date""" + if start is not None: + self.start = date_from_str(start) + else: + self.start = datetime.datetime.min.date() + if end is not None: + self.end = date_from_str(end) + else: + self.end = datetime.datetime.max.date() + if self.start >= self.end: + raise ValueError('Date range: "%s" , the start date must be before the end date' % self) + @classmethod + def day(cls, day): + """Returns a range that only contains the given day""" + return cls(day,day) + def __contains__(self, date): + """Check if the date is in the range""" + date = date_from_str(date) + return self.start <= date and date <= self.end + def __str__(self): + return '%s - %s' % ( self.start.isoformat(), self.end.isoformat()) |