Поиск по блогу

воскресенье, 23 ноября 2014 г.

Как парсить date и преобразовывать строки в объекты datetime.datetime

В документации Python все подробно описано, в этом посте примеры для использования в парсерах. Как строку преобразовать в объект даты... Здесь и табличка со всеми директивами, напрмир %A Weekday as locale’s full name (Sunday, Monday... )

Directive Meaning Example Notes
%a Weekday as locale’s abbreviated name.
Sun, Mon, ..., Sat (en_US);
So, Mo, ..., Sa (de_DE)
(1)
%A Weekday as locale’s full name.
Sunday, Monday, ..., Saturday (en_US);
Sonntag, Montag, ..., Samstag (de_DE)
(1)
%w Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. 0, 1, ..., 6  
%d Day of the month as a zero-padded decimal number. 01, 02, ..., 31  
%b Month as locale’s abbreviated name.
Jan, Feb, ..., Dec (en_US);
Jan, Feb, ..., Dez (de_DE)
(1)
%B Month as locale’s full name.
January, February, ..., December (en_US);
Januar, Februar, ..., Dezember (de_DE)
(1)
%m Month as a zero-padded decimal number. 01, 02, ..., 12  
%y Year without century as a zero-padded decimal number. 00, 01, ..., 99  
%Y Year with century as a decimal number. 1970, 1988, 2001, 2013  
%H Hour (24-hour clock) as a zero-padded decimal number. 00, 01, ..., 23  
%I Hour (12-hour clock) as a zero-padded decimal number. 01, 02, ..., 12  
%p Locale’s equivalent of either AM or PM.
AM, PM (en_US);
am, pm (de_DE)
(1), (2)
%M Minute as a zero-padded decimal number. 00, 01, ..., 59  
%S Second as a zero-padded decimal number. 00, 01, ..., 59 (3)
%f Microsecond as a decimal number, zero-padded on the left. 000000, 000001, ..., 999999 (4)
%z UTC offset in the form +HHMM or -HHMM (empty string if the the object is naive). (empty), +0000, -0400, +1030 (5)
%Z Time zone name (empty string if the object is naive). (empty), UTC, EST, CST  
%j Day of the year as a zero-padded decimal number. 001, 002, ..., 366  
%U Week number of the year (Sunday as the first day of the week) as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0. 00, 01, ..., 53 (6)
%W Week number of the year (Monday as the first day of the week) as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0. 00, 01, ..., 53 (6)
%c Locale’s appropriate date and time representation.
Tue Aug 16 21:30:00 1988 (en_US);
Di 16 Aug 21:30:00 1988 (de_DE)
(1)
%x Locale’s appropriate date representation.
08/16/88 (None);
08/16/1988 (en_US);
16.08.1988 (de_DE)
(1)
%X Locale’s appropriate time representation.
21:30:00 (en_US);
21:30:00 (de_DE)
(1)
%% A literal '%' character. %  
In [1]:
 from datetime import datetime, date, time
In []:
 d = date(2005, 7, 14) 
In [3]:
dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
In [10]:
dt
Out[10]:
datetime.datetime(2006, 11, 21, 16, 30)
In [12]:
dt1 = datetime.strptime("21-11-06 16:30", "%d-%m-%y %H:%M")
dt1
Out[12]:
datetime.datetime(2006, 11, 21, 16, 30)

А в следующем примере год имеет 4 цифры - меняем %y на %Y

In [15]:
mydt=datetime.strptime("2014-06-30", "%Y-%m-%d")
mydt
Out[15]:
datetime.datetime(2014, 6, 30, 0, 0)
In [18]:
mydt.day, mydt.month, mydt.year,  mydt.weekday()
Out[18]:
(30, 6, 2014, 0)

Оказывается, что 30 июня 2014 - это понедельник... а еще надо запомнить, что mydt.weekday() вызывается со () Почему?

In [19]:
help(mydt.weekday)
Help on built-in function weekday:

weekday(...)
    Return the day of the week represented by the date.
    Monday == 0 ... Sunday == 6


In [21]:
mydt.isoformat()
Out[21]:
'2014-06-30T00:00:00'
In [22]:
>>> # Formatting datetime
>>> dt.strftime("%A, %d. %B %Y %I:%M%p")
#'Tuesday, 21. November 2006 04:30PM'
Out[22]:
'Tuesday, 21. November 2006 04:30PM'
In [23]:
>>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
#'The day is 21, the month is November, the time is 04:30PM.'
Out[23]:
'The day is 21, the month is November, the time is 04:30PM.'
In [6]:
dir(dt)
Out[6]:
['__add__',
 '__class__',
 '__delattr__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__le__',
 '__lt__',
 '__ne__',
 '__new__',
 '__radd__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rsub__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 'astimezone',
 'combine',
 'ctime',
 'date',
 'day',
 'dst',
 'fromordinal',
 'fromtimestamp',
 'hour',
 'isocalendar',
 'isoformat',
 'isoweekday',
 'max',
 'microsecond',
 'min',
 'minute',
 'month',
 'now',
 'replace',
 'resolution',
 'second',
 'strftime',
 'strptime',
 'time',
 'timetuple',
 'timetz',
 'today',
 'toordinal',
 'tzinfo',
 'tzname',
 'utcfromtimestamp',
 'utcnow',
 'utcoffset',
 'utctimetuple',
 'weekday',
 'year']
In [2]:
help(date)
Help on class date in module datetime:

class date(__builtin__.object)
 |  date(year, month, day) --> date object
 |  
 |  Methods defined here:
 |  
 |  __add__(...)
 |      x.__add__(y) <==> x+y
 |  
 |  __eq__(...)
 |      x.__eq__(y) <==> x==y
 |  
 |  __format__(...)
 |      Formats self with strftime.
 |  
 |  __ge__(...)
 |      x.__ge__(y) <==> x>=y
 |  
 |  __getattribute__(...)
 |      x.__getattribute__('name') <==> x.name
 |  
 |  __gt__(...)
 |      x.__gt__(y) <==> x>y
 |  
 |  __hash__(...)
 |      x.__hash__() <==> hash(x)
 |  
 |  __le__(...)
 |      x.__le__(y) <==> x<=y
 |  
 |  __lt__(...)
 |      x.__lt__(y) <==> x<y
 |  
 |  __ne__(...)
 |      x.__ne__(y) <==> x!=y
 |  
 |  __radd__(...)
 |      x.__radd__(y) <==> y+x
 |  
 |  __reduce__(...)
 |      __reduce__() -> (cls, state)
 |  
 |  __repr__(...)
 |      x.__repr__() <==> repr(x)
 |  
 |  __rsub__(...)
 |      x.__rsub__(y) <==> y-x
 |  
 |  __str__(...)
 |      x.__str__() <==> str(x)
 |  
 |  __sub__(...)
 |      x.__sub__(y) <==> x-y
 |  
 |  ctime(...)
 |      Return ctime() style string.
 |  
 |  fromordinal(...)
 |      int -> date corresponding to a proleptic Gregorian ordinal.
 |  
 |  fromtimestamp(...)
 |      timestamp -> local date from a POSIX timestamp (like time.time()).
 |  
 |  isocalendar(...)
 |      Return a 3-tuple containing ISO year, week number, and weekday.
 |  
 |  isoformat(...)
 |      Return string in ISO 8601 format, YYYY-MM-DD.
 |  
 |  isoweekday(...)
 |      Return the day of the week represented by the date.
 |      Monday == 1 ... Sunday == 7
 |  
 |  replace(...)
 |      Return date with new specified fields.
 |  
 |  strftime(...)
 |      format -> strftime() style string.
 |  
 |  timetuple(...)
 |      Return time tuple, compatible with time.localtime().
 |  
 |  today(...)
 |      Current date or datetime:  same as self.__class__.fromtimestamp(time.time()).
 |  
 |  toordinal(...)
 |      Return proleptic Gregorian ordinal.  January 1 of year 1 is day 1.
 |  
 |  weekday(...)
 |      Return the day of the week represented by the date.
 |      Monday == 0 ... Sunday == 6
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  day
 |  
 |  month
 |  
 |  year
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __new__ = <built-in method __new__ of type object>
 |      T.__new__(S, ...) -> a new object with type S, a subtype of T
 |  
 |  max = datetime.date(9999, 12, 31)
 |  
 |  min = datetime.date(1, 1, 1)
 |  
 |  resolution = datetime.timedelta(1)


In []:
 


Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий