TimeValue.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # -*- coding: euc-jp -*-
3 
4 
5 
17 
18 
19 import OpenRTM_aist
20 
21 TIMEVALUE_ONE_SECOND_IN_USECS = 1000000 # 1 [sec] = 1000000 [usec]
22 
23 
36 class TimeValue:
37  """
38  """
39 
40 
41 
42 
57  def __init__(self, sec=None, usec=None):
58  global TIMEVALUE_ONE_SECOND_IN_USECS
59 
60  if type(sec) == str:
61  sec = float(sec)
62  if type(usec) == str:
63  usec = float(usec)
64 
65  # TimeValue(double timeval)
66  if sec and usec is None:
67  if sec >= 0.0:
68  dbHalfAdj_ = 0.5
69  else:
70  dbHalfAdj_ = -0.5
71 
72  self.tv_sec = long(sec)
73  self.tv_usec = long((sec - float(self.tv_sec)) *
74  float(TIMEVALUE_ONE_SECOND_IN_USECS) + dbHalfAdj_)
75  self.normalize()
76  return
77 
78  if sec is None:
79  self.tv_sec = long(0)
80  else:
81  self.tv_sec = long(sec)
82 
83  if usec is None:
84  self.tv_usec = long(0)
85  else:
86  self.tv_usec = long(usec)
87  self.normalize()
88  return
89 
90 
91 
106  def __sub__(self, tm):
107  global TIMEVALUE_ONE_SECOND_IN_USECS
108  try:
109  res = TimeValue()
110  except:
111  res = OpenRTM_aist.TimeValue()
112 
113  if self.tv_sec >= tm.tv_sec:
114  # +
115  if self.tv_usec >= tm.tv_usec:
116  # 繰り下がり無し
117  res.tv_sec = self.tv_sec - tm.tv_sec
118  res.tv_usec = self.tv_usec - tm.tv_usec
119  else:
120  # self.tv_usec < tm.tv_usec 繰り下がり有り res.tv_sec = self.tv_sec - tm.tv_sec - 1 res.tv_usec = (self.tv_usec + TIMEVALUE_ONE_SECOND_IN_USECS) - tm.tv_usec else: # self.tv_sec < tm.tv_sec # - if tm.tv_usec >= self.tv_usec: # 繰り下がり無し res.tv_sec = -(tm.tv_sec - self.tv_sec) res.tv_usec = -(tm.tv_usec - self.tv_usec) else: # tm.tv_usec < self.tv_usec 繰り下がり有り res.tv_sec = -(tm.tv_sec - self.tv_sec - 1) res.tv_usec = -(tm.tv_usec + TIMEVALUE_ONE_SECOND_IN_USECS) + self.tv_usec self.normalize() return res ## # @if jp # # @brief 時間加算 # # 設定された時間に引数で与えられた時間を加算する。 # # @param self # @param tm 加算時間 # # @return 加算結果 # # @else # # @endif def __add__(self, tm): global TIMEVALUE_ONE_SECOND_IN_USECS res = TimeValue() res.tv_sec = self.tv_sec + tm.tv_sec res.tv_usec = self.tv_usec + tm.tv_usec if res.tv_usec > TIMEVALUE_ONE_SECOND_IN_USECS: res.tv_sec += 1 res.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS self.normalize() return res def sec(self): return self.tv_sec def usec(self): return self.tv_usec ## # @if jp # # @brief double型→時間型変換 # # 引数で与えられたdouble型を時間型に変換する。 # # @param self # @param time 変換元値 # # @return 変換結果 # # @else # # @endif def set_time(self, time): global TIMEVALUE_ONE_SECOND_IN_USECS self.tv_sec = long(time) self.tv_usec = long((time - float(self.tv_sec)) * float(TIMEVALUE_ONE_SECOND_IN_USECS)) return self ## # @if jp # # @brief 時間型→double型変換 # # 保持している内容をdouble型に変換する。 # # @param self # @return double型変換結果 # # @else # # @endif def toDouble(self): global TIMEVALUE_ONE_SECOND_IN_USECS return float(self.tv_sec) + float(self.tv_usec / float(TIMEVALUE_ONE_SECOND_IN_USECS)) ## # @if jp # @brief 設定時間を出力する # # 設定時間を文字列出力する。<br> # # @param self # # @return 設定時間文字列表示 # # @else # # @endif def __str__(self): global TIMEVALUE_ONE_SECOND_IN_USECS return str(self.tv_sec + self.tv_usec / float(TIMEVALUE_ONE_SECOND_IN_USECS)) ## # @if jp # @brief 符号判定 # # 保持している内容の符号を判定する。<br> # # @param self # # @return 正ならば1を、負ならば-1を、0ならば0 # # @else # # @endif def sign(self): if self.tv_sec > 0: return 1 if self.tv_sec < 0: return -1 if self.tv_usec > 0: return 1 if self.tv_usec < 0: return -1 return 0 ## # @if jp # @brief 正規化 # @else # @brief Normalize # @endif # def normalize(self): global TIMEVALUE_ONE_SECOND_IN_USECS if self.tv_usec >= TIMEVALUE_ONE_SECOND_IN_USECS: self.tv_sec += 1 self.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS while self.tv_usec >= TIMEVALUE_ONE_SECOND_IN_USECS: self.tv_sec += 1 self.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS elif self.tv_usec <= -TIMEVALUE_ONE_SECOND_IN_USECS: self.tv_sec -= 1 self.tv_usec += TIMEVALUE_ONE_SECOND_IN_USECS while self.tv_usec <= -TIMEVALUE_ONE_SECOND_IN_USECS: self.tv_sec -= 1 self.tv_usec += TIMEVALUE_ONE_SECOND_IN_USECS if self.tv_sec >= 1 and self.tv_usec < 0: self.tv_sec -= 1 self.tv_usec += TIMEVALUE_ONE_SECOND_IN_USECS elif self.tv_sec < 0 and self.tv_usec > 0: self.tv_sec += 1 self.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS
121  res.tv_sec = self.tv_sec - tm.tv_sec - 1
122  res.tv_usec = (self.tv_usec + TIMEVALUE_ONE_SECOND_IN_USECS) - tm.tv_usec
123  else:
124  # self.tv_sec < tm.tv_sec # -
125  if tm.tv_usec >= self.tv_usec:
126  # 繰り下がり無し
127  res.tv_sec = -(tm.tv_sec - self.tv_sec)
128  res.tv_usec = -(tm.tv_usec - self.tv_usec)
129  else:
130  # tm.tv_usec < self.tv_usec 繰り下がり有り res.tv_sec = -(tm.tv_sec - self.tv_sec - 1) res.tv_usec = -(tm.tv_usec + TIMEVALUE_ONE_SECOND_IN_USECS) + self.tv_usec self.normalize() return res ## # @if jp # # @brief 時間加算 # # 設定された時間に引数で与えられた時間を加算する。 # # @param self # @param tm 加算時間 # # @return 加算結果 # # @else # # @endif def __add__(self, tm): global TIMEVALUE_ONE_SECOND_IN_USECS res = TimeValue() res.tv_sec = self.tv_sec + tm.tv_sec res.tv_usec = self.tv_usec + tm.tv_usec if res.tv_usec > TIMEVALUE_ONE_SECOND_IN_USECS: res.tv_sec += 1 res.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS self.normalize() return res def sec(self): return self.tv_sec def usec(self): return self.tv_usec ## # @if jp # # @brief double型→時間型変換 # # 引数で与えられたdouble型を時間型に変換する。 # # @param self # @param time 変換元値 # # @return 変換結果 # # @else # # @endif def set_time(self, time): global TIMEVALUE_ONE_SECOND_IN_USECS self.tv_sec = long(time) self.tv_usec = long((time - float(self.tv_sec)) * float(TIMEVALUE_ONE_SECOND_IN_USECS)) return self ## # @if jp # # @brief 時間型→double型変換 # # 保持している内容をdouble型に変換する。 # # @param self # @return double型変換結果 # # @else # # @endif def toDouble(self): global TIMEVALUE_ONE_SECOND_IN_USECS return float(self.tv_sec) + float(self.tv_usec / float(TIMEVALUE_ONE_SECOND_IN_USECS)) ## # @if jp # @brief 設定時間を出力する # # 設定時間を文字列出力する。<br> # # @param self # # @return 設定時間文字列表示 # # @else # # @endif def __str__(self): global TIMEVALUE_ONE_SECOND_IN_USECS return str(self.tv_sec + self.tv_usec / float(TIMEVALUE_ONE_SECOND_IN_USECS)) ## # @if jp # @brief 符号判定 # # 保持している内容の符号を判定する。<br> # # @param self # # @return 正ならば1を、負ならば-1を、0ならば0 # # @else # # @endif def sign(self): if self.tv_sec > 0: return 1 if self.tv_sec < 0: return -1 if self.tv_usec > 0: return 1 if self.tv_usec < 0: return -1 return 0 ## # @if jp # @brief 正規化 # @else # @brief Normalize # @endif # def normalize(self): global TIMEVALUE_ONE_SECOND_IN_USECS if self.tv_usec >= TIMEVALUE_ONE_SECOND_IN_USECS: self.tv_sec += 1 self.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS while self.tv_usec >= TIMEVALUE_ONE_SECOND_IN_USECS: self.tv_sec += 1 self.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS elif self.tv_usec <= -TIMEVALUE_ONE_SECOND_IN_USECS: self.tv_sec -= 1 self.tv_usec += TIMEVALUE_ONE_SECOND_IN_USECS while self.tv_usec <= -TIMEVALUE_ONE_SECOND_IN_USECS: self.tv_sec -= 1 self.tv_usec += TIMEVALUE_ONE_SECOND_IN_USECS if self.tv_sec >= 1 and self.tv_usec < 0: self.tv_sec -= 1 self.tv_usec += TIMEVALUE_ONE_SECOND_IN_USECS elif self.tv_sec < 0 and self.tv_usec > 0: self.tv_sec += 1 self.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS
131  res.tv_sec = -(tm.tv_sec - self.tv_sec - 1)
132  res.tv_usec = -(tm.tv_usec + TIMEVALUE_ONE_SECOND_IN_USECS) + self.tv_usec
133 
134  self.normalize()
135  return res
136 
137 
138 
153  def __add__(self, tm):
154  global TIMEVALUE_ONE_SECOND_IN_USECS
155  res = TimeValue()
156  res.tv_sec = self.tv_sec + tm.tv_sec
157  res.tv_usec = self.tv_usec + tm.tv_usec
158  if res.tv_usec > TIMEVALUE_ONE_SECOND_IN_USECS:
159  res.tv_sec += 1
160  res.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS
161 
162  self.normalize()
163  return res
164 
165 
166  def sec(self):
167  return self.tv_sec
168 
169 
170  def usec(self):
171  return self.tv_usec
172 
173 
174 
189  def set_time(self, time):
190  global TIMEVALUE_ONE_SECOND_IN_USECS
191 
192  self.tv_sec = long(time)
193  self.tv_usec = long((time - float(self.tv_sec)) * float(TIMEVALUE_ONE_SECOND_IN_USECS))
194  return self
195 
196 
209  def toDouble(self):
210  global TIMEVALUE_ONE_SECOND_IN_USECS
211  return float(self.tv_sec) + float(self.tv_usec / float(TIMEVALUE_ONE_SECOND_IN_USECS))
212 
213 
214 
227  def __str__(self):
228  global TIMEVALUE_ONE_SECOND_IN_USECS
229  return str(self.tv_sec + self.tv_usec / float(TIMEVALUE_ONE_SECOND_IN_USECS))
230 
231 
244  def sign(self):
245  if self.tv_sec > 0:
246  return 1
247  if self.tv_sec < 0:
248  return -1
249  if self.tv_usec > 0:
250  return 1
251  if self.tv_usec < 0:
252  return -1
253  return 0
254 
255 
256 
263  def normalize(self):
264  global TIMEVALUE_ONE_SECOND_IN_USECS
265  if self.tv_usec >= TIMEVALUE_ONE_SECOND_IN_USECS:
266  self.tv_sec += 1
267  self.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS
268 
269  while self.tv_usec >= TIMEVALUE_ONE_SECOND_IN_USECS:
270  self.tv_sec += 1
271  self.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS
272 
273  elif self.tv_usec <= -TIMEVALUE_ONE_SECOND_IN_USECS:
274  self.tv_sec -= 1
275  self.tv_usec += TIMEVALUE_ONE_SECOND_IN_USECS
276 
277  while self.tv_usec <= -TIMEVALUE_ONE_SECOND_IN_USECS:
278  self.tv_sec -= 1
279  self.tv_usec += TIMEVALUE_ONE_SECOND_IN_USECS
280 
281 
282  if self.tv_sec >= 1 and self.tv_usec < 0:
283  self.tv_sec -= 1
284  self.tv_usec += TIMEVALUE_ONE_SECOND_IN_USECS
285 
286  elif self.tv_sec < 0 and self.tv_usec > 0:
287  self.tv_sec += 1
288  self.tv_usec -= TIMEVALUE_ONE_SECOND_IN_USECS
def __init__(self, sec=None, usec=None)
Definition: TimeValue.py:57
def normalize(self)
Normalize.
Definition: TimeValue.py:263


openrtm_aist_python
Author(s): Shinji Kurihara
autogenerated on Mon Feb 28 2022 23:01:07