{
"info": {
"author": "David O'Connor",
"author_email": "david.alan.oconnor@gmail.com",
"bugtrack_url": null,
"classifiers": [],
"description": "Saturn: Simple functions for tz-aware datetimes\n===============================================\n\nPerforms common operations on datetimes with clean syntax, acting as a thin wrapper\nfor datetime and pytz. Force timezone-aware\ndatetimes. All operations are top-level functions: No dealing with\nmethods from multiple modules and objects.\n\nThere are several existing modules designed to improve Python's datetimes.\nHere's why Saturn is different:\n\n - Uses native datetime types for compatibility and speed\n - Only one import required\n - Clean, intuitive syntax and function names. No boilerplate.\n - Operates exclusively with top-level functions; no sorting through methods\n from multiple objects and modules\n - Raises an exception if a func is given a tz-naive datetime as input. All datetime\n outputs are timezone-aware, with an easily-set TZ, defaulting to UTC.\n\nThis project doesn't tackle the deeper problems with Python's datetimes that can arise\nfrom timezone and localization conflicts. It aims to make working with dateimtes easier by providing a\nconcise, consistent, and expressive API; and preventing naive datetimes from entering your code.\n\nSaturn uses Pytz for timezones. Used as a dependency.:\n`Pytz website `_\nPytz is licensed under the MIT license.\n\n... and uses code from Arrow for string formatting and parsing. Not a dependency.:\n`Arrow website: `_\nArrow is licensed under Apache 2.\n\nPython 2 is unsupported.\n\nIncluded functions\n------------------\n\n - datetime: Return a timezone-aware datetime.datetime object. Created the same way as datetime.datetime,\n with an optional 'tz' argument for a timezone string. Defaults to UTC.\n - time: Same concept as datetime.time; easily create a tz-aware time.\n - now: Find current utc time; timezone-aware.\n - range_dt: Iterate over datetimes, with a customizable interval. Similar to builtin range. Lazy.\n - fix_naive: Convert a timezone-naive datetime to an aware one.\n - move_tz: Change a datetime from one timezone to another.\n - combine: Similar to datetime.datetime.combine, but always tz-aware.\n - to_str: Similar to datetime.datetime.strftime, but with a cleaner format string, from Arrow.\n - from_str: Similar to datetime.datetime.strptime, but with a cleaner format string, from Arrow.\n Returns date, datetime, or time objects as needed.\n - to_iso: Wrapper for datetime.datetime's isoformat() method, as a function.\n - from_iso: Create a datetime from an isoformat string.\n - to_epoch: Wrapper for datetime.datetime's timestamp method, as a function.\n - from_epoch: Wrapper for datetime.datetime's from_timestamp method, as a function.\n - split: Split a datetime into date and time components. Useful because datetime's .time() method strips timezone info.\n - add, subtract: Add or subtract to/from a datetime.\n - overlaps: Deterine if two date/time/datetime ranges overlap.\n - timedelta, date, and today are included as wrappers for their respective datetime/date classes, so you don't need to import datetime.\n\n\nInstallation\n------------\n\n.. code-block:: bash\n\n pip install saturn\n\n\nDocumentation\n-------------\n\nCreate a timezone-aware datetime. If you don't specify a 'tz' argument, it defaults\nto UTC. Works for times too:\n\n.. code-block:: python\n\n saturn.datetime(2016, 1, 1, 16, tz='US/Eastern')\n # datetime.datetime(2016, 1, 1, 16, 0, tzinfo=)\n\n saturn.datetime(2016, 1, 1, 16)\n # datetime.datetime(2016, 1, 1, 16, 0, tzinfo=)\n\n saturn.time(11, 29, 30)\n # datetime.time(11, 29, 30, tzinfo=)\n\n\nMake a tz-naive datetime aware:\n\n.. code-block:: python\n\n naive = datetime.datetime(2016, 1, 1)\n saturn.fix_naive(naive, \"Pacific/Midway\")\n # datetime.datetime(2016, 1, 1, 0, 0, tzinfo=)\n\n\nFind the current datetime, in UTC:\n\n.. code-block:: python\n\n saturn.now()\n # datetime.datetime(2016, 4, 29, 20, 36, 53, 257753, tzinfo=)\n\n\nMove from one timezone to another:\n\n.. code-block:: python\n\n dt = saturn.datetime(2016,1,1, tz='Asia/Gaza')\n # datetime.datetime(2016, 1, 1, 0, 0, tzinfo=)\n\n saturn.move_tz(dt, 'Europe/Vatican')\n # datetime.datetime(2015, 12, 31, 23, 0, tzinfo=\n\n\nCombine a date and time into a timezone-aware datetime. If the time is already aware, the 'tz' argument is ignored:\n\n.. code-block:: python\n\n date, time = datetime.date(2016, 3, 2), datetime.time(16, 30)\n\n saturn.combine(date, time)\n # datetime.datetime(2016, 3, 2, 16, 30, tzinfo=)\n\n saturn.combine(date, time, tz='Europe/London')\n # datetime.datetime(2016, 3, 2, 16, 30, tzinfo=)\n\n\nSplit a datetime into date and time components; keeps tzinfo, unlike datetime.time().\n\n.. code-block:: python\n\n dt = saturn.datetime(2016, 3, 2, 16, 30, 1, 500, tz='US/Mountain')\n date, time = saturn.split(dt)\n # datetime.date(2016, 3, 2)\n # datetime.time(16, 30, 1, 500, tzinfo=)\n\n\nIterate through a range of datetimes. Valid intervals are 'week', 'month', 'day'\n'hour', 'minute', 'second', 'millisecond', and 'microsecond':\n\n.. code-block:: python\n\n start, end = saturn.datetime(2016, 1, 2, 12, 30), saturn.datetime(2016, 1, 5, 12, 30)\n for dt in saturn.range_dt(start, end, interval='day'):\n print(dt)\n\n # 2016-01-02 12:30:00+00:00\n # 2016-01-03 12:30:00+00:00\n # 2016-01-04 12:30:00+00:00\n\n for dt in saturn.range_dt(start, end, 4, interval='hour'):\n print(dt)\n\n # 2016-01-02 12:30:00+00:00\n # 2016-01-02 16:30:00+00:00\n # 2016-01-02 20:30:00+00:00\n ...\n # 2016-01-05 00:30:00+00:00\n # 2016-01-05 04:30:00+00:00\n # 2016-01-05 08:30:00+00:00\n\n\nConvert a datetime to a string. Uses format from Arrow:\n\n.. code-block:: python\n\n saturn.to_str(saturn.now(), 'YYYY-MM-DD hh:mm')\n # '2016-04-29 03:30'\n\n\nConvert a string to a datetime. Uses format from Arrow. If the string includes a timezone, the optional tz argument is ignored:\n\n.. code-block:: python\n\n saturn.from_str('2016-04-29 03:30', 'YYYY-MM-DD hh:mm')\n # datetime.datetime(2016, 4, 29, 3, 30, tzinfo=)\n\n saturn.from_str('2016-04-29 03:30', 'YYYY-MM-DD hh:mm', tz='Africa/Cairo')\n # datetime.datetime(2016, 4, 29, 3, 30, tzinfo=)\n\n saturn.from_str('1381685817', 'X')\n # datetime.datetime(2013, 10, 13, 17, 36, 57, tzinfo=)\n\n\nConvert a datetime to an ISO-8601 string or epoch:\n\n.. code-block:: python\n\n saturn.to_iso(saturn.now())\n # '2016-04-29T20:12:05.807558+00:00'\n\n saturn.to_epoch(saturn.now())\n # 1461960725.807558\n\n\nConvert an ISO-8601 string or epoch to a datetime:\n\n.. code-block:: python\n\n saturn.from_iso('2016-04-29T20:12:05.000000+00:00')\n # datetime.datetime(2016, 4, 29, 20, 12, 05, tzinfo=)\n\n saturn.from_epoch(1461960725)\n # datetime.datetime(2016, 4, 29, 21, 12, 5, tzinfo=)\n\n\nFor details on to_str and from_str syntax, please reference `Arrow's formatting guide `_.\n\nCheck if a range of times overlaps.\n\n.. code-block:: python\n\n start1 = saturn.datetime(2018, 1, 1, 9)\n end1 = saturn.datetime(2018, 1, 1, 12)\n start2 = saturn.datetime(2018, 1, 1, 11)\n end2 = saturn.datetime(2018, 1, 1, 17)\n\n saturn.overlaps(start1, end1, start2, end2)\n # True\n saturn.overlaps(start1, end1, saturn.datetime(2018, 1, 1, 13), end2)\n # False\n\n\nFunction input and output:\n--------------------------\n\n.. code-block:: python\n\n datetime(year: float, month: float, day: float, hour: float=0, minute: float=0,\n second: float=0, microsecond: float=0, tzinfo=None, tz: str='UTC') -> datetime.datetime\n\n time(hour: float, minute: float=0, second: float=0,\n microsecond: float=0, tzinfo=None, tz: str='UTC') -> datetime.time\n\n now() -> datetime.datetime\n\n combine(_date: datetime.date, _time: _datetime.time, tz: str='UTC') -> datetime.datetime\n\n fix_naive(dt: TimeOrDatetime, tz: str='UTC') -> datetime.datetime\n\n to_str(dt: DateOrDatetime, str_format: str) -> str\n\n from_str(dt_str: str, str_format: str, tz: str='UTC') -> DateOrTimeOrDatetime\n\n to_iso(dt: DateOrDatetime) -> str\n\n from_iso(iso_str: str, tz: str='UTC') -> datetime.datetime\n\n to_epoch(dt: DateOrDatetime) -> float:\n\n from_epoch(epoch: float, tz: str='UTC') -> _datetime.datetime:\n\n move_tz(dt: datetime.datetime, tz: str) -> datetime.datetime\n\n add(dt: datetime.datetime, days: float=0, seconds: float=0, microseconds: float=0,\n milliseconds: float=0, minutes: float=0, hours: float=0, weeks: float=0) -> datetime.datetime\n\n subtract(dt: datetime.datetime, days: float=0, seconds: float=0, microseconds: float=0,\n milliseconds: float=0, minutes: float=0, hours: float=0, weeks: float=0) -> datetime.datetime\n\n range_dt(start: DateOrDatetime, end: DateOrDatetime, step: int=1,\n interval: str='day') -> Iterator[datetime.datetime]\n\n split(dt: datetime.datetime) -> Tuple[_datetime.date, _datetime.time]:\n\n overlaps(start1: DateOrTimeOrDatetime, start2: DateOrTimeOrDatetime,\n end1: DateOrTimeOrDatetime, end2: DateOrTimeOrDatetime) -> bool:\n\n\n\nSome syntax we're dodging:\n--------------------------\n\n\n.. code-block:: python\n\n pytz.timezone('Europe/Berlin').localize(datetime.datetime(1985, 2, 1, 13, 21))\n\n arrow.Arrow(1999, 9, 9, 9, 30, tzinfo=dateutil.tz.gettz('US/Eastern'))\n\n pytz.timezone('US/Mountain').localize(datetime.datetime.combine(date, time))\n\n aware_dt.astimezone(pytz.timezone('US/Pacific'))\n\n aware_time = datetime.time(aware_dt.hour, aware_dt.minute, aware_dt.second,\n aware_dt.microsecond, aware_dt.tzinfo)\n\n\nReplaced by:\n------------\n\n\n.. code-block:: python\n\n saturn.datetime(1985, 2, 1, 13, 21, tz='Europe/Berlin')\n\n saturn.datetime(1999, 9, 9, 9, 30, tz='US/Eastern')\n\n saturn.combine(date, time, 'US/Mountain')\n\n saturn.move_tz(aware_dt, 'US/Pacific')\n\n _, aware_time = saturn.split(aware_dt)\n\n\n\n\n",
"description_content_type": "",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/David-OConnor/saturn",
"keywords": "datetime,pytz,timezone,tzinfo",
"license": "Apache 2.0",
"maintainer": "",
"maintainer_email": "",
"name": "Saturn",
"package_url": "https://pypi.org/project/Saturn/",
"platform": "",
"project_url": "https://pypi.org/project/Saturn/",
"project_urls": {
"Homepage": "https://github.com/David-OConnor/saturn"
},
"release_url": "https://pypi.org/project/Saturn/0.3.5/",
"requires_dist": [
"pytz (>=2016.3)"
],
"requires_python": "",
"summary": "Simple functions for tz-aware datetimes.",
"version": "0.3.5"
},
"last_serial": 3846044,
"releases": {
"0.1": [
{
"comment_text": "",
"digests": {
"md5": "bf7ef492890b6e1acfeabc5d02ed84c6",
"sha256": "1556a35fa94b28843aeb754a5bcb3b3a179f6b9d2ffd144b2d9398f6098570c2"
},
"downloads": -1,
"filename": "Saturn-0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "bf7ef492890b6e1acfeabc5d02ed84c6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 14003,
"upload_time": "2016-05-04T15:51:41",
"url": "https://files.pythonhosted.org/packages/b7/be/9f55f7b7def9ed1a07caa95539145b1ca418d335546166afd95d98de37b2/Saturn-0.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "53f3f9693e104cb8087c47bc97037366",
"sha256": "eaacbb68d43efb294db039d53155d8c3224e58c81dc5c3b97e6b08d766ad7fc3"
},
"downloads": -1,
"filename": "Saturn-0.1.zip",
"has_sig": false,
"md5_digest": "53f3f9693e104cb8087c47bc97037366",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 16852,
"upload_time": "2016-05-04T15:51:51",
"url": "https://files.pythonhosted.org/packages/2a/c5/af77f1fed3108bf91e5023583337742e2bb7916ab466be878801451515eb/Saturn-0.1.zip"
}
],
"0.2": [
{
"comment_text": "",
"digests": {
"md5": "dd92c8333fa74ea39694baf0726586e9",
"sha256": "6cb607c3750ba5d00600a9ef08ffe131968dc4251ea9dee132357b6a27060a6a"
},
"downloads": -1,
"filename": "Saturn-0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "dd92c8333fa74ea39694baf0726586e9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 15770,
"upload_time": "2016-08-27T19:08:08",
"url": "https://files.pythonhosted.org/packages/c5/fb/80f95d17e9ebb7a4eb9747e282313823c1aed16b1c96467122127aca779f/Saturn-0.2-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "abda77f952aea303a2f474d727219c85",
"sha256": "76548157d0db289b4202e50401cd601a784d19f45b12a2ba6c6a7a695ce01061"
},
"downloads": -1,
"filename": "Saturn-0.2.tar.gz",
"has_sig": false,
"md5_digest": "abda77f952aea303a2f474d727219c85",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 11695,
"upload_time": "2016-08-27T19:08:11",
"url": "https://files.pythonhosted.org/packages/79/15/11cbecfc55dc4c8c6f22507bb93e314de8052298143e4cf1a4cbc7132362/Saturn-0.2.tar.gz"
}
],
"0.3": [
{
"comment_text": "",
"digests": {
"md5": "2bbb04de840509225e2d8bd77437eb3b",
"sha256": "895a8411f982834a70d088cd90d5ab71d69154ab3caa83121d2e209d4a82656c"
},
"downloads": -1,
"filename": "Saturn-0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2bbb04de840509225e2d8bd77437eb3b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 16124,
"upload_time": "2016-10-27T20:19:36",
"url": "https://files.pythonhosted.org/packages/07/04/f12991e163c60548dce30a2cd8468d0379b58b04842c85565394cc20414b/Saturn-0.3-py3-none-any.whl"
}
],
"0.3.1": [
{
"comment_text": "",
"digests": {
"md5": "7eb9fe8e8716b455868c2a70ab4ce107",
"sha256": "4ea827429d05152a8eb7df28a32416ea9dd11a6e96ad131f4f2488342cab9d6e"
},
"downloads": -1,
"filename": "Saturn-0.3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7eb9fe8e8716b455868c2a70ab4ce107",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 16159,
"upload_time": "2017-05-18T18:25:40",
"url": "https://files.pythonhosted.org/packages/25/bc/19f0246cc2fabeb75f8b506d49f7c09f0540ee0dae8bacad715177947c8f/Saturn-0.3.1-py3-none-any.whl"
}
],
"0.3.2": [
{
"comment_text": "",
"digests": {
"md5": "2acef2d5925ae4c6ba6b9da6234c5898",
"sha256": "496e4d32181cd9199b3b57440cc883af344734189da33be1dd2f7ac5fda35447"
},
"downloads": -1,
"filename": "Saturn-0.3.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2acef2d5925ae4c6ba6b9da6234c5898",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 16744,
"upload_time": "2017-05-21T22:28:58",
"url": "https://files.pythonhosted.org/packages/07/b2/18e2076abe81bbc04220d87a45ad3c55803b5c44b55685a987d684bce620/Saturn-0.3.2-py3-none-any.whl"
}
],
"0.3.3": [
{
"comment_text": "",
"digests": {
"md5": "1640334be3c8a34121b53e1438e15a35",
"sha256": "c89ec913445b36a9ac3b06864cc15e39339eff245cf159d0df7329a64423da3a"
},
"downloads": -1,
"filename": "Saturn-0.3.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1640334be3c8a34121b53e1438e15a35",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 16751,
"upload_time": "2017-05-22T18:09:23",
"url": "https://files.pythonhosted.org/packages/12/3f/433274b54a6706db8603aabd02cd771581c7d53d560c27e96ecefd67a12b/Saturn-0.3.3-py3-none-any.whl"
}
],
"0.3.4": [
{
"comment_text": "",
"digests": {
"md5": "894ebef03f590fb428c9b07426542636",
"sha256": "55bdf4726f7d376a3461b8075a17c0703ed4327d4164b7e2faab7a0944d726ea"
},
"downloads": -1,
"filename": "Saturn-0.3.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "894ebef03f590fb428c9b07426542636",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 16750,
"upload_time": "2017-05-22T18:19:30",
"url": "https://files.pythonhosted.org/packages/9a/3f/dba4832afea1f9afd97390daa48f42fbd662a44c990d9f9bf222dcc25c9d/Saturn-0.3.4-py3-none-any.whl"
}
],
"0.3.5": [
{
"comment_text": "",
"digests": {
"md5": "4491b157a96b5ce3a10b70955f9783d7",
"sha256": "b366d2a87de08078846c079c28768443ebed320d98efe3a5a9bbad160d057019"
},
"downloads": -1,
"filename": "Saturn-0.3.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4491b157a96b5ce3a10b70955f9783d7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 16800,
"upload_time": "2018-05-09T00:46:46",
"url": "https://files.pythonhosted.org/packages/97/d7/3b015cea2afb0c68130a0dc1e56f6990efd03b270516a656fddd22e99fcc/Saturn-0.3.5-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8b6e72a8bae571327984d142805476bb",
"sha256": "1c84ba05fdd9e36e0c1d505ec84bc9038cbd35fa7fe1e67c310b528f5788ba3f"
},
"downloads": -1,
"filename": "Saturn-0.3.5.tar.gz",
"has_sig": false,
"md5_digest": "8b6e72a8bae571327984d142805476bb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 15171,
"upload_time": "2018-05-09T00:46:48",
"url": "https://files.pythonhosted.org/packages/09/fa/4e6d0e54da07db07fc6f3124d2ec4f312f5906072424b2921ce2928fa7fa/Saturn-0.3.5.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "4491b157a96b5ce3a10b70955f9783d7",
"sha256": "b366d2a87de08078846c079c28768443ebed320d98efe3a5a9bbad160d057019"
},
"downloads": -1,
"filename": "Saturn-0.3.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4491b157a96b5ce3a10b70955f9783d7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 16800,
"upload_time": "2018-05-09T00:46:46",
"url": "https://files.pythonhosted.org/packages/97/d7/3b015cea2afb0c68130a0dc1e56f6990efd03b270516a656fddd22e99fcc/Saturn-0.3.5-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8b6e72a8bae571327984d142805476bb",
"sha256": "1c84ba05fdd9e36e0c1d505ec84bc9038cbd35fa7fe1e67c310b528f5788ba3f"
},
"downloads": -1,
"filename": "Saturn-0.3.5.tar.gz",
"has_sig": false,
"md5_digest": "8b6e72a8bae571327984d142805476bb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 15171,
"upload_time": "2018-05-09T00:46:48",
"url": "https://files.pythonhosted.org/packages/09/fa/4e6d0e54da07db07fc6f3124d2ec4f312f5906072424b2921ce2928fa7fa/Saturn-0.3.5.tar.gz"
}
]
}