mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
46 lines
No EOL
1.2 KiB
Python
46 lines
No EOL
1.2 KiB
Python
import re
|
|
|
|
class Timestamp:
|
|
"""Parsing the VILLASnode human-readable timestamp format"""
|
|
|
|
def __init__(self, seconds = 0, nanoseconds = None, offset = None, sequence = None):
|
|
self.seconds = seconds
|
|
self.nanoseconds = nanoseconds
|
|
self.offset = offset
|
|
self.sequence = sequence
|
|
|
|
@classmethod
|
|
def parse(self, ts):
|
|
m = re.match('(\d+)(?:\.(\d+))?([-+]\d+(?:\.\d+)?(?:e[+-]?\d+)?)?(?:\((\d+)\))?', ts)
|
|
|
|
seconds = int(m.group(1)); # Mandatory
|
|
nanoseconds = int(m.group(2)) if m.group(2) else None
|
|
offset = float(m.group(3)) if m.group(3) else None
|
|
sequence = int(m.group(4)) if m.group(4) else None
|
|
|
|
return Timestamp(seconds, nanoseconds, offset, sequence)
|
|
|
|
def __str__(self):
|
|
str = "%u" % (self.seconds)
|
|
|
|
if self.nanoseconds is not None:
|
|
str += ".%09u" % self.nanoseconds
|
|
if self.offset is not None:
|
|
str += "+%u" % self.offset
|
|
if self.sequence is not None:
|
|
str += "(%u)" % self.sequence
|
|
|
|
return str
|
|
|
|
def __float__(self):
|
|
sum = float(self.seconds)
|
|
|
|
if self.nanoseconds is not None:
|
|
sum += self.nanoseconds * 1e-9
|
|
if self.offset is not None:
|
|
sum += self.offset
|
|
|
|
return sum
|
|
|
|
def __cmp__(self, other):
|
|
return cmp(float(self), float(other)) |