将偏移量转换为非偏移量的Python日期

时间:2019-02-06 02:19:18

标签: python-2.7 datetime python-dateutil

import sqlalchemy as sa


metadata = sa.MetaData()

person = sa.Table(
    "person",
    metadata,
    sa.Column("person_id", sa.BigInteger, primary_key=True, autoincrement=True),
    sa.Column("mother", None, sa.ForeignKey(person.c.person_id)),
)                                         # ^ This is an errror

我有一个时间输入字符串:

    from dateutil.parser import parse
    from dateutil.relativedelta import relativedelta
    from dateutil.tz import gettz
    from datetime import datetime, timedelta

    input_time = '2019-02-01 09:50:08+11:00'

    parsed=parse(input_time)
    print parsed.tzinfo

我想将其转换为以下格式:YYYY-MM-DD HH:MM:SS。基本上,将偏移量添加到实际时间对象。对于上面的示例,我正在寻找以下输出:

       input_time = '2019-02-01 09:50:08+11:00'

在dateutil库中找到了一些有用的东西,以解析作为字符串传递的date对象并获取偏移量详细信息,但这给了我以下输出:

      input_time_converted = '2019-02-01 20:50:08'

但是我不知道如何从上面获得实际的数字并进行其余的数学运算。

我尝试用-官方dateutil解析器文档中解释的方式进行调用-

          tzoffset(None, 39600)

但是没有用。

1 个答案:

答案 0 :(得分:1)

#!/usr/bin/env python2


def process_messed_up_timestamp(ts):
    """Convert messed up timestamps to something else.

    Input timestamp is in UTC format with the offset that
    should be applied but hasn't been.
    """
    from datetime import datetime, timedelta
    timestamp, plus, offset = ts[:19], ts[19], ts[20:]
    # should validate plus is '+' or '-'
    fmt = '%Y-%m-%d %H:%M:%S'
    base = datetime.strptime(timestamp, fmt)
    hours, minutes = [int(n) for n in offset.split(':')]
    delta = timedelta(hours=hours, minutes=minutes)
    multiplier = -1 if plus == '-' else 1
    return (base + multiplier * delta).strftime(fmt)


input_time = '2019-02-01 09:50:08+11:00'
input_time_converted = '2019-02-01 20:50:08'
assert process_messed_up_timestamp(input_time) == input_time_converted