WillH
WillH

Reputation: 303

Non-standard Julian day time stamp

I have a timestamp in a non-standard format, its a concatenation of a number of elements. I'd like to convert at least the last part of the string into hours/minutes/seconds/decimal seconds so I can calculate the time gap between them (typically of the order of 2-5 seconds). I have looked at this link but it assumes a 'proper' Julian time. How to convert Julian date to standard date?

My time stamp looks like this

1380643373

It is set up as ddd hh mm ss.s This timestamp represent 138th day, 06:43:37.3

Is there a datetime method of working with this or do I need to strip out the various parts (hh,mm,ss.s) and concatenate them in some way? As I am only interested in the seconds, if I can just extract them I could deal with that by adding 60 if the second timestamp is smaller than the first - i.e event passes over the minute change boundary.

Upvotes: 0

Views: 147

Answers (1)

pho
pho

Reputation: 25489

If you're only interested in seconds, you can do:

timestamp = 1380643373
seconds = (timestamp % 1000) / 10 # Gives 37.3

timestamp % 1000 gives you the last three digits of timestamp. Then you divide that by 10 to get seconds.

If it's a string, you can take the last three characters by slicing it.

timestamp = "1380643373"
seconds = int(timestamp[-3:]) / 10 # Gives 37.3

It's pretty easy to convert the timestamp to a datetime using the divmod() function repeatedly:

import datetime

base_date = datetime.datetime(2000, 1, 1, 0, 0, 0) # Midnight on Jan 1 2000


timestamp = 1380643373

timestamp, seconds = divmod(timestamp, 1000) # Gives 1380643, 373
seconds = seconds / 10 # Gives 37.3

timestamp, minutes = divmod(timestamp, 100) # Gives 13806, 43

days, hours = divmod(timestamp, 100) # Gives 138, 6


tdelta = datetime.timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds) # Gives datetime.timedelta(days=138, seconds=24217, microseconds=300000)
new_date = base_date + tdelta

Upvotes: 1

Related Questions