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
- Host: GitHub
- URL: https://github.com/bluedynamics/bda.intellidatetime
- Owner: bluedynamics
- License: other
- Created: 2010-12-11T12:20:11.000Z (over 15 years ago)
- Default Branch: master
- Last Pushed: 2022-12-05T11:32:34.000Z (over 3 years ago)
- Last Synced: 2025-03-25T05:41:46.103Z (about 1 year ago)
- Language: Python
- Homepage:
- Size: 37.1 KB
- Stars: 2
- Watchers: 6
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE.rst
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]