fix timezones
This commit is contained in:
parent
9c94431791
commit
85bec7373d
1 changed files with 35 additions and 12 deletions
|
@ -4,6 +4,7 @@ import json
|
||||||
from datetime import datetime, date, time
|
from datetime import datetime, date, time
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import logging
|
import logging
|
||||||
|
import pytz
|
||||||
|
|
||||||
from kython.klogging import setup_logzero
|
from kython.klogging import setup_logzero
|
||||||
|
|
||||||
|
@ -17,8 +18,6 @@ def get_logger():
|
||||||
return logging.getLogger('jawbone-provider')
|
return logging.getLogger('jawbone-provider')
|
||||||
|
|
||||||
|
|
||||||
fromtimestamp = datetime.fromtimestamp # TODO careful
|
|
||||||
|
|
||||||
XID = str # TODO how to shared with backup thing?
|
XID = str # TODO how to shared with backup thing?
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,12 +31,16 @@ class SleepEntry:
|
||||||
self.js = js
|
self.js = js
|
||||||
|
|
||||||
# TODO @memoize decorator?
|
# TODO @memoize decorator?
|
||||||
# date is going to be the date of the day you mostly slept on
|
|
||||||
# e.g. if you went to bed at 01:30 24 august and work up at 8AM, date is gonna be 24 august
|
|
||||||
@property
|
@property
|
||||||
def date_(self) -> date:
|
def date_(self) -> date:
|
||||||
dates = str(self.js['date'])
|
return self.sleep_end.date()
|
||||||
return datetime.strptime(dates, "%Y%m%d").date()
|
|
||||||
|
def _fromts(self, ts: int) -> datetime:
|
||||||
|
return pytz.utc.localize(datetime.utcfromtimestamp(ts)).astimezone(self._tz).astimezone(self._tz)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _tz(self):
|
||||||
|
return pytz.timezone(self._details['tz'])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def title(self) -> str:
|
def title(self) -> str:
|
||||||
|
@ -55,15 +58,15 @@ class SleepEntry:
|
||||||
# not sure how.. I guess by the american ones
|
# not sure how.. I guess by the american ones
|
||||||
@property
|
@property
|
||||||
def created(self) -> datetime:
|
def created(self) -> datetime:
|
||||||
return fromtimestamp(self.js['time_created'])
|
return self._fromts(self.js['time_created'])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def completed(self) -> datetime:
|
def completed(self) -> datetime:
|
||||||
return fromtimestamp(self.js['time_completed'])
|
return self._fromts(self.js['time_completed'])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def asleep(self) -> datetime:
|
def asleep(self) -> datetime:
|
||||||
return fromtimestamp(self._details['asleep_time'])
|
return self._fromts(self._details['asleep_time'])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def sleep_start(self) -> datetime:
|
def sleep_start(self) -> datetime:
|
||||||
|
@ -75,7 +78,7 @@ class SleepEntry:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def sleep_end(self) -> datetime:
|
def sleep_end(self) -> datetime:
|
||||||
return fromtimestamp(self._details['awake_time'])
|
return self._fromts(self._details['awake_time'])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def graph(self) -> Path:
|
def graph(self) -> Path:
|
||||||
|
@ -85,7 +88,7 @@ class SleepEntry:
|
||||||
@property
|
@property
|
||||||
def phases(self) -> List[datetime]:
|
def phases(self) -> List[datetime]:
|
||||||
# TODO make sure they are consistent with emfit?
|
# TODO make sure they are consistent with emfit?
|
||||||
return [fromtimestamp(i['time']) for i in phases[self.xid]]
|
return [self._fromts(i['time']) for i in phases[self.xid]]
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f"{self.date_.strftime('%a %d %b')} {self.title}"
|
return f"{self.date_.strftime('%a %d %b')} {self.title}"
|
||||||
|
@ -273,9 +276,29 @@ def get_dataframe():
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
def test_tz():
|
||||||
|
sleeps = sleeps_by_date()
|
||||||
|
for s in sleeps.values():
|
||||||
|
assert s.sleep_start.tzinfo is not None
|
||||||
|
assert s.sleep_end.tzinfo is not None
|
||||||
|
|
||||||
|
for dd, exp in [
|
||||||
|
(date(year=2015, month=8 , day=28), time(hour=7, minute=20)),
|
||||||
|
(date(year=2015, month=9 , day=15), time(hour=6, minute=10)),
|
||||||
|
]:
|
||||||
|
sleep = sleeps[dd]
|
||||||
|
end = sleep.sleep_end
|
||||||
|
|
||||||
|
assert end.time() == exp
|
||||||
|
|
||||||
|
# TODO fuck. on 0909 I woke up at around 6 according to google timeline
|
||||||
|
# but according to jawbone, it was on 0910?? eh. I guess it's jus shitty tracking.
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
setup_logzero(get_logger())
|
setup_logzero(get_logger())
|
||||||
print(get_dataframe())
|
test_tz()
|
||||||
|
# print(get_dataframe())
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
Loading…
Add table
Reference in a new issue