我有一个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'
答案 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(...);