我通过HHTP客户邮递员传递一些虚拟参数,如下所示:
{"resourceId": "5293e7fb-ffnksadjfn-7b-abfr185fsa6b", "count": "1", "timeFrom": "2016-01-15T01:35:30.314Z", "timeTo": "2016-01-15T01:35:30.314Z", "sourceId": "card_16m7TaFYUmuhEmVRMoEwnaXa", "notes":"fmaksf"}
但我收到错误:
"data": "Reservation duration has to be positive."
timeFrom和timeTo必须采用该unicode格式。如何为timeTo参数添加时间?我找不到每个角色代表什么。它必须只添加一小时或两小时它不能添加天,否则我会得到一个不同的错误。我怎样才能在unicode中添加一个小时的时间并将其放入unicode for time以进行此传递?我正在尝试测试其他功能,但必须首先通过它。
答案 0 :(得分:1)
您应该使用datetime
模块来处理日期时间。您可以使用datetime.datetime.strptime()
将字符串解析为datetime.datetime
对象,然后使用datetime.timedelta
并添加您想要的1小时,然后使用datetime.datetime.strftime()
将其解析回来以您想要的格式字符串。示例 -
d['timeTo'] = (datetime.datetime.strptime(d['timeFrom'],'%Y-%m-%dT%H:%M:%S.%fZ') + datetime.timedelta(hours=1)).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
演示 -
>>> d = {"resourceId": "5293e7fb-ffnksadjfn-7b-abfr185fsa6b", "count": "1", "timeFrom": "2016-01-15T01:35:30.314Z", "timeTo": "2016-01-15T01:35:30.314Z", "sourceId": "card_16m7TaFYUmuhEmVRMoEwnaXa", "notes":"fmaksf"}
>>> import datetime
>>> d['timeTo'] = (datetime.datetime.strptime(d['timeFrom'],'%Y-%m-%dT%H:%M:%S.%fZ') + datetime.timedelta(hours=1)).strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
>>> d['timeTo']
'2016-01-15T02:35:30.314Z'
如果您使用的是Python 2.x,则可以使用str.decode()
方法使用所需的编码将字符串解码为unicode对象。在Python 3.x中,您可以获得正常的unicode对象,因此不需要对其进行解码。
答案 1 :(得分:0)
"timeFrom": "2016-01-15T01:35:30.314Z"
"timeTo": "2016-01-15T01:35:30.314Z"
鉴于他们完全相同的时间,持续时间将非常零(因此非正数)。
如果您只是对了解格式感兴趣,那么您可以传递更合适的值,以下内容将会有所帮助。时间字符串的组成部分是:
2016-01-15T01:35:30.314Z
|||| || || || || || |||| |
|||| || || || || || |||+- UTC timezone
|||| || || || || || +++-- milliseconds
|||| || || || || ++------ seconds
|||| || || || ++--------- minutes
|||| || || ++------------ hours
|||| || ++--------------- day of month
|||| ++------------------ month
++++--------------------- year
因此,如果您想添加一小时(例如),只需传入:
2016-01-15T02:35:30.314Z
如果您想使用Python动态修改字符串,那么它就像"简单"就像这样:
import datetime as dt
str1 = "2016-01-15T01:35:30.314Z"
fmt = '%Y-%m-%dT%H:%M:%S.%f%z'
print(str1)
str2 = (dt.datetime.strptime(str1.replace('Z','000+0000'),fmt) + dt.timedelta(hours=1)).strftime(fmt).replace('000+0000','Z')
print(str2)
此时为我输出的内容:
2016-01-15T01:35:30.314Z
2016-01-15T02:35:30.314Z
^
note this bit
这是str2
的设定,基本上归结为:
strptime
感到满意(第一个replace
)。strptime
创建datetime
对象。timedelta
为该对象添加一小时,您可以为其指定各种持续时间。strftime
将其重新转换为字符串。replace
。请注意,这仅适用于Z
时区说明符,如果您想处理其他时区,则需要指定它们的位置。