Pendulum相当于Arrow的replace()方法?

时间:2017-10-29 20:04:09

标签: python-3.x python-datetime

我有一个UTC日期时间字符串和一个我想比较的裸时间字符串。

pointTimeString = '2017-09-08T14:55:38Z'
startTimeString = '15:52'

时间是在同一天,但在英国夏令时,不是UTC。

这很有效,但感觉有点hacky:

import pendulum

pointTime = pendulum.parse(pointTimeString)
startTime = pendulum.parse(pointTimeString[0:11]+startTimeString, tz='Europe/London')

if pointTime > startTime:
    # Do stuff

Pendulum使用日期推断出有问题的时间是BST,并将UTC偏移设置为+1:00。钟摆raison d'être post明确地将Arrow的replace()方法视为有问题,但我没有看到等价物。重点是它不可能具有行为正确的replace()等价物吗?即使是这种情况,在将小时和分钟设置为其他内容时,是否有某种方法可以复制钟摆实例?

我希望能够做到这样的事情:

import pendulum

pointTime = pendulum.parse(pointTimeString)
startTime = pointTime.in_tz('Europe/London').from_format(startTimeString, "%H:%m")

if pointTime > startTime:
    # Do stuff

当然,目前这不起作用:AttributeError: 'Pendulum' object has no attribute 'from_format'

2 个答案:

答案 0 :(得分:0)

不像我想要的那样整洁,但这是非常富有表现力的,并且肯定感觉不那么黑客:

from datetime import datetime as dt
import pendulum

pointDT = pendulum.parse(pointTimeString)
startTime = dt.strptime(startTimeString, "%H:%M").time()
startDT = pendulum.instance(dt.combine(pointDT.date(), startTime), tz="Europe/London")

if pointDT > startDT:
    # Do stuff

灵感来自项目Github网站上an issue的答案。

答案 1 :(得分:0)

另一种选择。

pendulum

仅为startTimeString的日期创建>>> tempTime = pendulum.parse(startTimeString) 的实例。

pointTimeString

tempTime>>> startTime = pendulum.create(pointTime.year, pointTime.month, pointTime.day, tempTime.hour, tempTime.minute, 0, 0, tz=pointTime.tz)

的元素中汇总完整日期
>>> startTime
<Pendulum [2017-09-08T15:52:00+00:00]>

验证结果。

>>> pointTime.tz
<Timezone [+00:00]>
>>> startTime.tz
<Timezone [+00:00]>

特别确认时区已正确处理。

          df
            .write()
            .option("mode", "DROPMALFORMED")
            .option("compression", "snappy")
            .mode("overwrite")
            .format("orc")
            .option("index", "user_id")
            .save(...);