5

how I have a simple question. I need to convert a date in string format to a number:

time = '2014-03-05 07:22:26.976637+00:00'
type(time)
      str

I would like to convert this date to a unique number

Thank you.

3

2 Answers 2

7

In Python 3.7+:

>>> from datetime import datetime
>>> datetime.fromisoformat('2014-03-05 07:22:26.976637+00:00').timestamp()
1394004146.976637

There are two steps:

Convert input rfc-3339 time string into datetime object

#!/usr/bin/env python
from datetime import datetime

time_str = '2014-03-05 07:22:26.976637+00:00'
utc_time = datetime.strptime(time_str[:26], '%Y-%m-%d %H:%M:%S.%f')
assert time_str[-6:] == '+00:00'

Find number of the microseconds since Epoch for given datetime

from datetime import datetime, timedelta

epoch = datetime(1970, 1, 1)

def timestamp_microsecond(utc_time):
    td = utc_time - epoch
    assert td.resolution == timedelta(microseconds=1)
    return (td.days * 86400 + td.seconds) * 10**6 + td.microseconds

print(timestamp_microsecond(utc_time))
# -> 1394004146976637

The advantage is that you could convert this unique number back to the corresponding UTC time:

utc_time = epoch + timedelta(microseconds=1394004146976637)
# -> datetime.datetime(2014, 3, 5, 7, 22, 26, 976637)

Follow the links if you need to support arbitrary utc offsets (not just UTC time).

If you need to accept a leap second as the input time; see Python - Datetime not accounting for leap second properly?

Sign up to request clarification or add additional context in comments.

Comments

1

I would like to convert this date to a unique number

The standard unix thing to do would be to convert to seconds since epoch. However, if you just want a unique number:

>>> time = '2014-03-05 07:22:26.976637+00:00'
>>> int(''.join(c for c in time if c.isdigit()))
201403050722269766370000L

If, instead of a unique number, you want a python datetime object, then use:

>>> from dateutil import parser
>>> dt = parser.parse(time)
>>> dt
datetime.datetime(2014, 3, 5, 7, 22, 26, 976637, tzinfo=tzutc())

1 Comment

To complete the answer, use: dt.timestamp() which returns a unix time stamp in seconds as a float.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.