Skip to main content

A utility library to manage and manipulate UNIX epoch timestamps.

Project description

==================================
Epoch Timestamp Management Utility
==================================

The `epoch` provides a set of routines that help with the management
of UNIX epoch timestamps, including generation, adjustment, and
parsing.


Project
=======

* Homepage: https://github.com/metagriffin/epoch
* Bugs: https://github.com/metagriffin/epoch/issues


Installation
============

.. code:: bash

$ pip install epoch


Usage
=====

The following routines are available:

* ``epoch.now()`` : float

Returns a float representation of the current UNIX epoch timestamp,
i.e. the number of seconds since 1970/01/01.

* ``epoch.sod([ts][, tz][, offset][, replace])`` : float

Returns the epoch timestamp of the start of the current day relative
to the timezone `tz`. If `ts` is specified, the start of the day
containing `ts` is returned. If `offset` is specified, it is taken
to be an integral number of days to offset the returned value by.
Note that due to leap seconds, daylight savings, etc, this is more
complex than just 60 seconds * 60 minutes * 24 hours. If `replace`
is specified, it is a dictionary of datetime attributes to replace
after all other modifications have been made.

For example, the following will return the epoch timestamp in
Anchorage, AK, USA for tomorrow at 3 PM local time:

.. code:: python

epoch.sod(offset=1, tz='America/Anchorage', replace=dict(hour=15))


* ``epoch.sow([ts][, tz][, offset][, day][, replace])`` : float

Returns the epoch timestamp of the start of the current Gregorian
week relative to the timezone `tz`. If `ts` is specified, the start
of the week containing `ts` is returned. If `offset` is specified,
it is taken to be an integral number of weeks to offset the returned
value by. Note that due to leap days, leap seconds, daylight
savings, etc, this is more complex than just 60 seconds * 60 minutes
* 24 hours * 7 days. If `day` is specified, it specifies which day
is defined to be the "first" day of the week, where ``0`` (the
default) is Monday through ``6`` being Sunday. If `replace` is
specified, it is a dictionary of datetime attributes to replace
after all other modifications have been made (see `epoch.sod` for
examples).

* ``epoch.som([ts][, tz][, offset][, replace])`` : float

Returns the epoch timestamp of the start of the current Gregorian
month relative to the timezone `tz`. If `ts` is specified, the start
of the month containing `ts` is returned. If `offset` is specified,
it is taken to be an integral number of months to offset the
returned value by. If `replace` is specified, it is a dictionary of
datetime attributes to replace after all other modifications have
been made (see `epoch.sod` for examples).

* ``epoch.soy([ts][, tz][, offset][, replace])`` : float

Returns the epoch timestamp of the start of the current Gregorian
year relative to the timezone `tz`. If `ts` is specified, the start
of the year containing `ts` is returned. If `offset` is specified,
it is taken to be an integral number of years to offset the returned
value by. If `replace` is specified, it is a dictionary of datetime
attributes to replace after all other modifications have been made
(see `epoch.sod` for examples).

* ``epoch.zulu([ts][, ms])`` : string

Returns the specified epoch time `ts` (or current time if None or
not provided) as an ISO 8601 Combined string in zulu time (with
millisecond precision), e.g. ``epoch.zulu(1362187446.553)`` =>
``'2013-03-02T01:24:06.553Z'``. If `ms` is True (the default),
milliseconds will be included, otherwise truncated. If `ts` has
beyond-millisecond precision, it will be truncated to
millisecond-level precision.

* ``epoch.parseZulu(text)`` : float

Parses an ISO 8601 Combined string into an epoch timestamp. Note
that this function is limited to microsecond-level accuracy (a
`datetime` system library limitation) and isintended to be used with
strings generated by `epoch.zulu`, and is therefore not very
forgiving. For a much more human-friendly parser, try::

import dateutil.parser
result = dateutil.parser.parse(text, tzinfos = {'UTC': 0}))

but please note that it does not properly warn about ambiguities;
for example ``01/02/03`` gets interpreted without hesitation as
``2003/01/02``... ugh.

* ``epoch.parse(value)`` : float

Tries the following methods of extracting an epoch timestamp from
`text`:

* Checks for None, integer, or float type (and returns that as-is)
* Checks for an all-digits text, and casts that to float
* Fallsback to parsing via :func:`epoch.parseZulu`

Note that this function is intended to be used with code-generated
strings (such as those generated by `epoch.zulu`), and is therefore
not very forgiving. For a much more human-friendly parser, see the
example in :func:`epoch.parseZulu`.

* ``epoch.tsreplace([ts][, tz][, *params])`` : float

An epoch timestamp-oriented version of `epoch.dtreplace`. Example:

.. code:: python

import epoch

ts = epoch.parse('2015-12-08T14:56:33Z')
# ts == 1449586593.0

ts = epoch.tsreplace(ts, hour=9, minute=30)
# ts == 1449567033.0
s = epoch.zulu(ts)
# s == '2015-12-08T09:30:33.000Z'

ts = epoch.tsreplace(ts, tz='Europe/Paris', hour=9, minute=30)
# ts == 1449563433.0
s = epoch.zulu(ts)
# s == '2015-12-08T08:30:33.000Z'

* ``epoch.dtreplace(dt[, *params])`` : datetime

A version of :meth:`datetime.datetime.replace()` that properly
maintains the `dt.tzinfo` if the replace will cause DST boundary
switching.

* ``epoch.ts2age(ts[, origin][, tz])`` : float

## TODO: DOCUMENT
## import pdb;pdb.set_trace()

* ``epoch.age2ts(age[, origin][, tz])`` : float

## TODO: DOCUMENT
## import pdb;pdb.set_trace()

Note that the `epoch` package, when working with `datetime` objects,
always uses timezone-aware objects.

Project details


Release history Release notifications

This version
History Node

0.1.4

History Node

0.1.3

History Node

0.1.2

History Node

0.1.1

History Node

0.0.1

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
epoch-0.1.4.tar.gz (21.6 kB) Copy SHA256 hash SHA256 Source None Jan 1, 2017

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page