An open API service indexing awesome lists of open source software.

https://github.com/bluedynamics/bda.intellidatetime

Convert user input to a datetime objects
https://github.com/bluedynamics/bda.intellidatetime

Last synced: about 1 year ago
JSON representation

Convert user input to a datetime objects

Awesome Lists containing this project

README

          

bda.intellidatetime
===================

Overview
--------

``bda.intellidatetime`` provides a converter for date and time input to python
``datetime.datetime`` objects.

The input format is definded by a locale2pattern mapping and is provided by
a seperate interface.

Currently provided locales are:

- en
- de
- fr
- es
- uk
- it
- cs
- and the special locale ``iso``, which is used as default.

Example
-------

Use the convert function:

.. code-block:: pycon

>>> from bda.intellidatetime import convert
>>> convert('1.1.08', locale='de')
datetime.datetime(2008, 1, 1, 0, 0)

API
---

The signature of ``bda.intellidatetime.convert`` looks like so:

.. code-block:: python

def convert(date, time=None, tzinfo=None, locale='iso'):
"""Convert the input to a datetime object.

The convert function accepts unicode or non-unicode strings and tries
to parse out Date and Time information as follows:
* First try to get the localized datetime pattern information
* If no one is found, a default pattern is used.
* Parse the input by the definitions of the localized datetime pattern
* Create a datetime object and return it

The 'intelligence' is defined by following behaviour:

Date:
* If only one value is found f.e. '1', this value is handled as the
day value, for month and for year the current ones are used.
* Respective, if two values are given, they are handled as day and
month, year is auto completed with the current year.
* 3 values are a complete date information, if year is a 2-character
string, it is handled as year in the current century
* as limiters are all non-numeric values accepted
* date input can be done without limiters, therefor all characters
must be numbers, and the string length must be either 2, 4, 6 or 8
characters. 2 characters define the day, 4 characters the day and
the month, 6 characters day, month and the year of the current
century and 8 characters define a complete date.

Time:
* If time is None, time is set to 00:00
* if time is a 2-character string, it is handled as the hour, minutes
are defined as 00
* time input can be done without a limiter, therefor time must be an
all numeric 4-character string, the first 2 chars are handled as
hour, the second 2 chars as minute.
* as limiter are all non-numeric values accepted
* seconds are never computed and are therefor ALWAYS handled as '00'

Limiters can be any 1 or more character non numeric values. An input
can look like `` %_2008 1 abcde 5 ---`` and is still valid and with
default locale converted to ``datetime.datetime(2008, 1, 5, 0, 0)``.

If parsing of the input values is not possible or converting the parsed
values to numeric values is not possible or the valid date and time
range falls out of scope, a ``DateTimeConversionError`` is raised.

@param date - a date as string
@param time - a time as string
@param tzinfo - a tzinfo object to be considered, defaults to None. If
given the date and time taken as in the given timezone.
If the timezone is DST-aware time will be normalized
for DST/non-DST.
@param locale - a locale name, which is used to determine the date and
time patterns. There exists a special locale named
'iso', which is default and expects the input in ISO
format.
@return datetime - datetime.datetime object
@raise DateTimeConversionError - if conversion fails
"""

Licence
-------

- Simplified BSD

Contributors
============

- Robert Niederreiter (Author)
- Jens W. Klein

Changes
=======

1.4 (2022-12-05)
----------------

- Release wheel.
[rnix]

1.3 (2018-07-16)
----------------

- Python 3 compatibility.
[rnix]

- Convert doctests to unittests.
[rnix]

1.2.2
-----

- Package cleanup.
[rnix, 2017-03-29]

1.2.1
-----

- fix ``MANIFEST.in`` to include ``configure.zcml`` in release
[jensens, 2013-09-23]

1.2
---

- Use ``zope.interface.implementer`` instead of ``zope.interface.implements``.
[rnix, 2012-05-18]

1.1
---

- Provide convenience ``convert`` function.
[rnix, 2010-05-08]

- Change package structure.
[rnix, 2010-05-08]

- Move tests into seperate file.
[rnix, 2010-05-08]

- Change signature of converter. could now be registered as utility as well if
desired.
[rnix, 2010-05-08]

- Adapter pattern deprecated.
[rnix, 2010-05-08]

1.0
---

- Make it work
[rnix, jensens]