diff --git a/features/steps/core.py b/features/steps/core.py index 6f2baa5b..cdde7613 100644 --- a/features/steps/core.py +++ b/features/steps/core.py @@ -11,6 +11,7 @@ try: from io import StringIO except ImportError: from cStringIO import StringIO +import tzlocal def _parse_args(command): nargs=[] @@ -120,7 +121,7 @@ def check_output(context): @then('the output should contain "{text}" in the local time') def check_output_time_inline(context, text): out = context.stdout_capture.getvalue() - local_tz = pytz.timezone(util.get_local_timezone()) + local_tz = tzlocal.get_localzone() utc_time = date_parser.parse(text) date = utc_time + local_tz._utcoffset local_date = date.strftime("%Y-%m-%d %H:%M") diff --git a/jrnl/Journal.py b/jrnl/Journal.py index 32fb8b20..b5d7a664 100644 --- a/jrnl/Journal.py +++ b/jrnl/Journal.py @@ -23,6 +23,7 @@ import hashlib import plistlib import pytz import uuid +import tzlocal class Journal(object): def __init__(self, name='default', **kwargs): @@ -333,7 +334,7 @@ class DayOne(Journal): try: timezone = pytz.timezone(dict_entry['Time Zone']) except (KeyError, pytz.exceptions.UnknownTimeZoneError): - timezone = pytz.timezone(util.get_local_timezone()) + timezone = tzlocal.get_localzone() date = dict_entry['Creation Date'] date = date + timezone.utcoffset(date) raw = dict_entry['Entry Text'] @@ -357,7 +358,7 @@ class DayOne(Journal): 'Creation Date': utc_time, 'Starred': entry.starred if hasattr(entry, 'starred') else False, 'Entry Text': entry.title+"\n"+entry.body, - 'Time Zone': util.get_local_timezone(), + 'Time Zone': str(tzlocal.get_localzone()), 'UUID': entry.uuid, 'Tags': [tag.strip(self.config['tagsymbols']) for tag in entry.tags] } diff --git a/jrnl/util.py b/jrnl/util.py index 708150f0..4b252cbd 100644 --- a/jrnl/util.py +++ b/jrnl/util.py @@ -88,24 +88,6 @@ def yesno(prompt, default=True): raw = py23_input(prompt) return {'y': True, 'n': False}.get(raw.lower(), default) -def get_local_timezone(): - """Returns the Olson identifier of the local timezone. - In a happy world, tzlocal.get_localzone would do this, but there's a bug on OS X - that prevents that right now: https://github.com/regebro/tzlocal/issues/6""" - global __cached_tz - if not __cached_tz and "darwin" in sys.platform: - __cached_tz = os.popen("systemsetup -gettimezone").read().replace("Time Zone: ", "").strip() - if not __cached_tz or __cached_tz not in pytz.all_timezones_set: - link = os.readlink("/etc/localtime") - # This is something like /usr/share/zoneinfo/America/Los_Angeles. - # Find second / from right and take the substring - __cached_tz = link[link.rfind('/', 0, link.rfind('/'))+1:] - elif not __cached_tz: - __cached_tz = str(get_localzone()) - if not __cached_tz or __cached_tz not in pytz.all_timezones_set: - __cached_tz = "UTC" - return __cached_tz - def load_and_fix_json(json_path): """Tries to load a json object from a file. If that fails, tries to fix common errors (no or extra , at end of the line).