Background
In this package we’ll discuss Python’s maya package for parsing dates from strings. A previous article talked about the dateutil and dateparser libraries for finding dates in strings. maya is really great for standardizing variations in a field or list of dates.
maya can be installed using pip:
pip install maya
Standardizing dates with maya
Let’s start with a basic example. First, we just need to import maya. Next, we’ll use its parse method to convert the text into a MayaDT object. We can append the datetime method to this to get a datetime from the string.
import maya maya.parse("march 1 2019").datetime()
maya.parse("9th of february 2019").datetime()
maya.parse("1/1/2020").datetime()
Below are several more examples of different date variations.
maya.parse("1-1-2020").datetime() maya.parse("1 1 2020").datetime() maya.parse("Jan 1 2020").datetime() maya.parse("January 1 2020").datetime() maya.parse("January 1st 2020").datetime() maya.parse("1st of january 2020").datetime()
All of the above comes in handy if you’re dealing with a list of date strings that you need to standardize. Suppose, for example, we have a list containing some of the variations above.
strings = ["1-1-2020", "1 1 2020", "Jan 1 2020", "January 1 2020", "January 1st 2020", "1st of january 2020"]
Now, we can convert each string to a properly-formed datetime using a list comprehension.
[maya.parse(text).datetime() for text in strings]
Other functionality
maya has several additional features as well. In the below snippet we can add time to a defined datetime variable. The rfc2822 method formats the result as seen in the last line below. This time, we’ll use the when method, which can be used to create a MayaDT instance from a string. Following that, we use the snap method to adjust a datetime by days, hours, seconds, etc.
temp = maya.when('March 1 2019 12:00 EST') # add six hours temp.snap('@d+6h').rfc2822() # 'Fri, 01 Mar 2019 06:00:00 EST' # add 5 days, 4 hours, 3 minutes, and 2 seconds temp.snap('@d+5d+4h+3m+2s').rfc2822()
MayaDT objects also have several useful attributes. For example, let’s create a MayaDT object with the current timestamp.
now = maya.now()
Next, we can get attributes from this timestamp like below:
# get day of week (numerical) now.day # get week of year now.week # get day of week (numerical) now.weekday # get month (numerical) now.month
That’s all for this post! Check out more on maya here.
Please click here to follow my blog on Twitter!.