经过几个小时的搜索,我发现了许多相关但无法提供帮助的帖子。
我想要做的是输入例如:上午10:30进入TimeField
在浏览器上的django rest框架API中,它使用的是上午10:30格式('%I:%M %p'
)。
但是,当我使用邮递员进行测试时,输出采用24小时格式('%H:%M:%S')。我也尝试使用晚上10:30作为输入,但我得到的输出是10:30:00而不是22:30:00。
我发现的许多答案建议使用以下行更改settings.py
中的TimeField格式:
TIME_INPUT_FORMATS = ('%I:%M %p',)
但它对我不起作用。
对不起我在django休息框架方面缺乏经验,因为我还在学习。
以下是结果的屏幕截图。 在浏览器API上:
邮递员:
答案 0 :(得分:1)
如果您查看TimeField上的文档,您会看到:
签名:
TimeField(format=api_settings.TIME_FORMAT, input_formats=None)
其中
format
- 表示输出格式的字符串。如果未指定,则默认设置为与TIME_FORMAT
设置键相同的值,除非已设置,否则为'iso-8601'
。设置为格式字符串表示to_representation返回值应强制转换为字符串输出。格式字符串如下所述。将此值设置为None表示Python。
input_formats
- 表示可用于解析日期的输入格式的字符串列表。如果未指定,将使用TIME_INPUT_FORMATS
设置,默认为['iso-8601']
。
因此,您可以在序列化程序中指定format
和input_formats
,也可以设置settings.TIME_FORMAT
和settings.TIME_INPUT_FORMATS
。
让我们设置第一个案例:
class MySerializer(serializers.Serializer):
...
birthTime=serializers.TimeField(format='%I:%M %p', input_formats='%I:%M %p')
一些建议:
birth_time
。您可能需要使用输入格式,因为您可能会有许多不同的输入:
input_formats=['%I:%M %p','%H:%M',...]
答案 1 :(得分:0)
在Serializer validate方法中转换结果并返回它。
import time
t = time.strptime(timevalue_24hour, "%H:%M")
timevalue_12hour = time.strftime( "%I:%M %p", t )