Skip to content

Instantly share code, notes, and snippets.

@chronossc
Created June 3, 2014 20:47
Show Gist options
  • Save chronossc/0bb8c9cb9cbb69d2565f to your computer and use it in GitHub Desktop.
Save chronossc/0bb8c9cb9cbb69d2565f to your computer and use it in GitHub Desktop.
utc_to_timezone converts a time string from a timezone to another
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import errno
def error(msg):
print >> sys.stderr, msg
def info(msg):
print >> sys.stdout, msg
try:
import pytz
except ImportError:
error("pytz not installed. please install pytz (pip install pytz).")
sys.exit(status=errno.ENOPKG)
from argparse import ArgumentParser, ArgumentError
from datetime import datetime
FORMATS = ['%Y-%m-%d %H:%M', '%Y/%m/%d %H:%M', '%H:%M']
def discover_datetime(timestr):
for _format in FORMATS:
try:
d = datetime.strptime(timestr, _format)
except ValueError:
pass
else:
# if match format does not contains date, add to it now()
if '%Y' not in _format:
n = datetime.utcnow()
return datetime(n.year, n.month, n.day, d.hour, d.minute)
return d
error("Can't discover format. Use one of formats %s." % ', '.join(FORMATS))
sys.exit(status=errno.EINVAL)
def discover_timezone(zone):
try:
return pytz.timezone(zone)
except pytz.UnknownTimeZoneError:
error("Unknow timezone %s. Use know timezones please." % zone)
def convert_to_timezone(timestr, from_zone, to_zone):
d = discover_datetime(timestr)
try:
from_zone = pytz.timezone(from_zone)
except pytz.UnknownTimeZoneError:
error("Unknow 'from' timezone %s. Use know timezones please." %
from_zone)
sys.exit(status=errno.EINVAL)
try:
to_zone = pytz.timezone(to_zone)
except pytz.UnknownTimeZoneError:
error("Unknow 'to' timezone %s. Use know timezones please." % to_zone)
sys.exit(status=errno.EINVAL)
d = from_zone.localize(d)
info("%s (%s) => %s (%s)" % (
d.strftime("%Y-%m-%d %H:%M"), from_zone,
d.astimezone(to_zone).strftime("%Y-%m-%d %H:%M"), to_zone))
parser = ArgumentParser
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment