Пример #1
0
def parse_time_expression(value):
    def simple_date(sign, dig, type, floor):
        if dig or sign:
            from pyLibrary.debugs.logs import Log
            Log.error("can not accept a multiplier on a datetime")

        if floor:
            return Date(type).floor(Duration(floor))
        else:
            return Date(type)

    terms = re.match(r'(\d*[|\w]+)\s*([+-]\s*\d*[|\w]+)*', value).groups()

    sign, dig, type = re.match(r'([+-]?)\s*(\d*)([|\w]+)', terms[0]).groups()
    if "|" in type:
        type, floor = type.split("|")
    else:
        floor = None

    if type in MILLI_VALUES.keys():
        value = Duration(dig+type)
    else:
        value = simple_date(sign, dig, type, floor)

    for term in terms[1:]:
        if not term:
            continue
        sign, dig, type = re.match(r'([+-])\s*(\d*)([|\w]+)', term).groups()
        if "|" in type:
            type, floor = type.split("|")
        else:
            floor = None

        op = {"+": "__add__", "-": "__sub__"}[sign]
        if type in MILLI_VALUES.keys():
            if floor:
                from pyLibrary.debugs.logs import Log
                Log.error("floor (|) of duration not accepted")
            value = value.__getattribute__(op)(Duration(dig+type))
        else:
            value = value.__getattribute__(op)(simple_date(sign, dig, type, floor))

    return value
Пример #2
0
def unicode2datetime(value, format=None):
    """
    CONVERT UNICODE STRING TO datetime VALUE
    """
    ## http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
    if value == None:
        return None

    value = value.strip()
    if value.lower() == "now":
        return Date.now().value
    elif value.lower() == "today":
        return Date.today().value
    elif value.lower() in ["eod", "tomorrow"]:
        return Date.eod().value

    if any(value.lower().find(n) >= 0 for n in ["now", "today", "eod", "tomorrow"] + list(MILLI_VALUES.keys())):
        return parse(value).value

    if format != None:
        try:
            return datetime.strptime(value, format)
        except Exception, e:
            from pyLibrary.debugs.logs import Log

            Log.error("Can not format {{value}} with {{format}}", value=value, format=format, cause=e)
Пример #3
0
                value += ".000"
            return unix2Date(datetime2unix(datetime.strptime(value, format)))
        except Exception, e:
            from pyLibrary.debugs.logs import Log

            Log.error("Can not format {{value}} with {{format}}", value=value, format=format, cause=e)

    value = value.strip()
    if value.lower() == "now":
        return unix2Date(datetime2unix(datetime.utcnow()))
    elif value.lower() == "today":
        return unix2Date(math.floor(datetime2unix(datetime.utcnow()) / 86400) * 86400)
    elif value.lower() in ["eod", "tomorrow"]:
        return unix2Date(math.floor(datetime2unix(datetime.utcnow()) / 86400) * 86400 + 86400)

    if any(value.lower().find(n) >= 0 for n in ["now", "today", "eod", "tomorrow"] + list(MILLI_VALUES.keys())):
        return parse_time_expression(value)

    try:  # 2.7 DOES NOT SUPPORT %z
        local_value = parse_date(value)  #eg 2014-07-16 10:57 +0200
        return unix2Date(datetime2unix((local_value - local_value.utcoffset()).replace(tzinfo=None)))
    except Exception:
        pass

    formats = [
        "%Y-%m-%dT%H:%M:%S",
        "%Y-%m-%dT%H:%M:%S.%f"
    ]
    for f in formats:
        try:
            return unix2Date(datetime2unix(datetime.strptime(value, f)))
Пример #4
0
def unicode2datetime(value, format=None):
    """
    CONVERT UNICODE STRING TO datetime VALUE
    """
    ## http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior
    if value == None:
        return None

    value = value.strip()
    if value.lower() == "now":
        return Date.now().value
    elif value.lower() == "today":
        return Date.today().value
    elif value.lower() in ["eod", "tomorrow"]:
        return Date.eod().value

    if any(value.lower().find(n) >= 0 for n in ["now", "today", "eod", "tomorrow"] + list(MILLI_VALUES.keys())):
        return parse(value).value

    if format != None:
        try:
            return datetime.strptime(value, format)
        except Exception, e:
            from pyLibrary.debugs.logs import Log

            Log.error("Can not format {{value}} with {{format}}", value=value, format=format, cause=e)