<filename>oakling/storager/tree/_tz.py<gh_stars>1-10
#!usr/bin/env python
# -*- coding:utf-8 -*-
# Create on 2017.5.21
# Author: <NAME>

"""
Oakling ./Tree/Content/File Manager

Reference: jupyter notebook _tz module

Timezone utilities

Just UTC-awareness right now
"""

# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.

import arrow
from datetime import tzinfo, timedelta, datetime

# constant for zero offset
ZERO = timedelta(0)


class tzUTC(tzinfo):
    """tzinfo object for UTC (zero offset)"""

    def utcoffset(self, d):
        return ZERO

    def dst(self, d):
        return ZERO


UTC = tzUTC()


# def utc_aware(unaware):
#     """decorator for adding UTC tzinfo to datetime's utcfoo methods"""
#
#     def utc_method(*args, **kwargs):
#         dt = unaware(*args, **kwargs)
#         return dt.replace(tzinfo=UTC)
#
#     return utc_method


# utcfromtimestamp = utc_aware(datetime.utcfromtimestamp)
# utcnow = utc_aware(datetime.utcnow)


def isoformat(dt):
    """Return iso-formatted timestamp

    Like .isoformat(), but uses Z for UTC instead of +00:00
    """
    return dt.isoformat().replace('+00:00', 'Z')


# tz_utc_8 = timezone(timedelta(hours=8))



def utc_aware(unaware):
    """decorator for adding UTC tzinfo to datetime's utcfoo methods"""

    def utc_method(*args, **kwargs):
        dt = unaware(*args, **kwargs)
        return dt

    return utc_method

def local_aware(unaware):
    """decorator for adding UTC tzinfo to datetime's utcfoo methods"""

    def utc_method(*args, **kwargs):
        dt = unaware(*args, **kwargs)
        return dt

    return utc_method


def localfromtimestamp(timestamp, timezone=8):
    """
    Get datetime string from timestamp
    :param dt:
    :return:
    """
    # return arrow.now().format('YYYY-MM-DD HH:mm:ss')
    return arrow.get(float(timestamp)).replace(hours=timezone).format('YYYY-MM-DD HH:mm:ss')


def utcfromtimestamp(timestamp):
    """
    Get datetime string from timestamp
    :param dt:
    :return:
    """
    # return arrow.now().format('YYYY-MM-DD HH:mm:ss')
    return arrow.get(float(timestamp)).format('YYYY-MM-DD HH:mm:ss')


#utcfromtimestamp = utc_aware(_utcfromtimestamp)
#localfromtimestamp = local_aware(_localfromtimestamp)