unicode time" data":"预留时间必须为正。"

时间:2015-10-01 01:54:07

标签: python datetime unicode

我通过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以进行此传递?我正在尝试测试其他功能,但必须首先通过它。

2 个答案:

答案 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时区说明符,如果您想处理其他时区,则需要指定它们的位置。