Skip to main content

Simple and beautiful way to create date and datetime objects in Python.

Project description

Beautiful Date

PyPI version Tests Downloads

Simple and beautiful way to create date and datetime objects in Python.

Before:

from datetime import date, datetime

d = date(year=2018, month=3, day=25)
t = datetime(year=2018, month=3, day=25, hour=23, minute=45)

After:

from beautiful_date import *

d = 25/Mar/2018
t = (25/Mar/2018)[23:45]

Installation

pip install beautiful-date

Examples

Create Date

Using months names:

>>> from beautiful_date import *

>>> 25/Mar/2018  # European format
BeautifulDate(2018, 3, 25)
>>> Mar/25/2018  # US format
BeautifulDate(2018, 3, 25)

Using months numbers:

>>> 25/M[3]/2018  # European format
BeautifulDate(2018, 3, 25)
>>> M[3]/25/2018  # US format
BeautifulDate(2018, 3, 25)

Or alternatively:

>>> D @ 25/3/2018  # European format (default)
BeautifulDate(2018, 3, 25)

>>> D = MDY()  # Add this at the top of your script to use US format. 
>>> d = D @ 3/25/2018  # US format
BeautifulDate(2018, 3, 25)

Available formats (needed only if you create dates using D@):

class DMY(BaseDateFormat):
    _format = 'day', 'month', 'year'

class MDY(BaseDateFormat):
    _format = 'month', 'day', 'year'

class YMD(BaseDateFormat):
    _format = 'year', 'month', 'day'

class YDM(BaseDateFormat):
    _format = 'year', 'day', 'month'

You can also easily retrieve current date as a BeautifulDate object and current time using:

>>> D.today()
BeautifulDate(2020, 8, 24)

>>> D.now()
datetime.datetime(2020, 8, 24, 0, 59, 12, 451363)

Create Datetime

Previous methods create BeautifulDate objects which are inherited from date but can be easily extended to datetime using indexing/slicing:

>>> (Oct/16/1995)[:]
datetime.datetime(1995, 10, 16, 0, 0)

>>> (Oct/16/1995)[23]
datetime.datetime(1995, 10, 16, 23, 0)

>>> (Oct/16/1995)[23:14]
datetime.datetime(1995, 10, 16, 23, 14)

>>> (Oct/16/1995)[23:14:10]
datetime.datetime(1995, 10, 16, 23, 14, 10)

You can also use prefix D @ if you need months by their numbers:

>>> (D @ 16/10/1995)[:]
datetime.datetime(1995, 10, 16, 0, 0)

>>> (D @ 16/10/1995)[23]
datetime.datetime(1995, 10, 16, 23, 0)

>>> (D @ 16/10/1995)[23:14]
datetime.datetime(1995, 10, 16, 23, 14)

>>> (D @ 16/10/1995)[23:14:10]
datetime.datetime(1995, 10, 16, 23, 14, 10)

Date/Datetime manipulations:

This library also provides simple interface for relativedelta from dateutil

Adding/Subtracting/Setting timedeltas:

Notice that singular time unit (year, month, ...) sets given value, plural (years, months,) adds it.

>>> d = 26/Mar/2018
>>> t = d[12:23:15]

>>> d + 2 * years
BeautifulDate(2020, 3, 26)
>>> d - 2 * days
BeautifulDate(2018, 3, 24)

>>> t + 25 * hours
datetime.datetime(2018, 3, 27, 13, 23, 15)

Available deltas: years, months, weeks, days, hours, minutes, seconds, microseconds, leapdays (see relativedelta).

>>> d = 26/Mar/2018
>>> t = d[12:23:15]

>>> d + 2022 * year
BeautifulDate(2022, 3, 26)
>>> d += 2 * day
>>> d
BeautifulDate(2018, 3, 2)

>>> t + 22 * hour
datetime.datetime(2018, 3, 26, 22, 23, 15)
>>> t += 22 * hour
>>> t
datetime.datetime(2018, 3, 26, 22, 23, 15)

Available setters: year, month, day, hour, minute, second, microsecond, yearday and nlyearday (see relativedelta).

Weekdays:

Get next Monday:

>>> d = 29/Mar/2018  # Thursday
>>> d + MO  # Equivalent to MO(1)
BeautifulDate(2018, 4, 2)

Get second to next Monday:

>>> d = 29/Mar/2018
>>> d + MO(2)
BeautifulDate(2018, 4, 9)

Get last Saturday:

>>> d = 29/Mar/2018
>>> d - SA
BeautifulDate(2018, 3, 24)

Get second to last Saturday:

>>> d = 29/Mar/2018
>>> d - SA(2)
BeautifulDate(2018, 3, 17)

Get second to last Saturday (same as previous):

>>> d = 29/Mar/2018
>>> d + SA(-2)
BeautifulDate(2018, 3, 17)

Util

drange:

You can use drange to generate ranges of dates:

>>> for d in drange(27/Mar/1994, 5/Apr/1994):
...     print(d)
1994-03-27
1994-03-28
1994-03-29
1994-03-30
1994-03-31
1994-04-01
1994-04-02
1994-04-03
1994-04-04

>>> for d in drange(27/Mar/1994, 5/Apr/1994, 2*days):
...     print(d)
1994-03-27
1994-03-29
1994-03-31
1994-04-02
1994-04-04

and datetimes:

>>> for dt in drange((27/Mar/1994)[10:25], (4/Apr/1994)[10:10]):
...     print(dt)
1994-03-27 10:25:00
1994-03-28 10:25:00
1994-03-29 10:25:00
1994-03-30 10:25:00
1994-03-31 10:25:00
1994-04-01 10:25:00
1994-04-02 10:25:00
1994-04-03 10:25:00

>>> for dt in drange((27/Mar/1994)[10:25], (4/Apr/1994)[10:10], 20*hours):
...     print(dt)
1994-03-27 10:25:00
1994-03-28 06:25:00
1994-03-29 02:25:00
1994-03-29 22:25:00
1994-03-30 18:25:00
1994-03-31 14:25:00
1994-04-01 10:25:00
1994-04-02 06:25:00
1994-04-03 02:25:00
1994-04-03 22:25:00

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

beautiful-date-2.2.0.tar.gz (7.5 kB view hashes)

Uploaded source

Built Distribution

beautiful_date-2.2.0-py2.py3-none-any.whl (7.7 kB view hashes)

Uploaded py2 py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page