unicode time“data”:“预订持续时间必须为正。”

2024-10-03 23:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过HHTP客户端postman传递一些伪参数,如下所示:

{"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参数添加时间?我找不到每个人物代表什么。它只能加上一两个小时,它不能加上几天,否则我会得到一个不同的错误。我怎样才能在timefromunicode中加上一个小时,然后把它放在unicode中让timeTo通过呢?我试图测试其他功能,但必须首先通过这一点


Tags: 客户端参数count错误unicodecardpostman小时
2条回答
"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时区说明符,如果要处理其他时区,则需要指定它们是什么

您应该使用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'

如果您使用的是python2.x,那么可以使用str.decode()方法将字符串解码为unicode对象,使用所需的编码。在Python3.x中,您会得到一个普通的unicode对象,因此不需要对其进行解码

相关问题 更多 >