出于某种原因,< code>jsonify函数正在将我的< code>datetime.date转换为看起来像HTTP日期的内容。使用< code>jsonify时,如何保持< code>yyyy-mm-dd格式的日期?
test_date = datetime.date(2017, 4, 27)
print(test_date) # 2017-04-27
test_date_jsonify = jsonify(test_date)
print(test_date_jsonify.get_data(as_text=True)) # Thu, 27 Apr 2017 00:00:00 GMT
正如注释中所建议的,使用< code > JSON ify(str(test _ date))返回所需的格式。但是,请考虑以下情况:
test_dict = {"name": "name1", "date":datetime.date(2017, 4, 27)}
print(test_dict) # {"name": "name1", "date":datetime.date(2017, 4, 27)}
test_dict_jsonify = jsonify(test_dict)
print(test_dict_jsonify.get_data(as_text=True)) # {"date": "Thu, 27 Apr 2017 00:00:00 GMT", "name": "name1"}
test_dict_jsonify = jsonify(str(test_dict))
print(test_dict_jsonify.get_data(as_text=True)) # "{"date": datetime.date(2017, 4, 27), "name": "name1"}"
在这种情况下,< code>str()解决方案不起作用。
您可以更改应用程序的.json_encoder
属性,实现JSONEncoder
的变体,根据您认为合适的方式格式化日期。
日期时间。日期
不是JSON类型,因此默认情况下它不可序列化。相反,Flask添加了一个钩子,将日期转储到RFC 1123格式的字符串中,这与HTTP请求和响应的其他部分中的日期一致。
如果要更改格式,请使用自定义JSON编码器。子类JSONEncoder
并将Flask.json_encoder
设置为它。
from flask import Flask
from flask.json import JSONEncoder
class MyJSONEncoder(JSONEncoder):
def default(self, o):
if isinstance(o, date):
return o.isoformat()
return super().default(o)
class MyFlask(Flask):
json_encoder = MyJSONEncoder
app = MyFlask(__name__)
最好使用 ISO 8601 来传输和存储值。它可以由JavaScript Date.parse
(和其他解析器)明确地解析。在输出时选择输出格式,而不是在存储时选择输出格式。
表示RFC 2822或ISO 8601日期的字符串(可以使用其他格式,但结果可能是意外的)。
加载数据时,无法知道值是日期而不是字符串(因为 date 不是 JSON 类型),因此你不会得到 datetime.date
,而是得到一个字符串。(如果你确实得到了一个日期,它怎么知道返回日期
而不是日期时间
?
按照这个片段,您可以这样做:
from flask.json import JSONEncoder
from datetime import date
class CustomJSONEncoder(JSONEncoder):
def default(self, obj):
try:
if isinstance(obj, date):
return obj.isoformat()
iterable = iter(obj)
except TypeError:
pass
else:
return list(iterable)
return JSONEncoder.default(self, obj)
app = Flask(__name__)
app.json_encoder = CustomJSONEncoder
路线:
import datetime as dt
@app.route('/', methods=['GET'])
def index():
now = dt.datetime.now()
return jsonify({'now': now})
问题内容: 由于某种原因,该函数将my转换为似乎是HTTP日期的日期。使用时如何保持日期格式? 如注释中所建议,using 返回所需的格式。但是,请考虑以下情况: 在这种情况下,该解决方案不起作用。 问题答案: 按照以下代码片段,您可以执行以下操作: 路线:
我的输入值是'13/5/201412:00:00am',我需要将此格式更改为'2014-5-1300:00:00',但所有的datetime变量都是以dd-mm-yyyy格式返回的。我不想将日期转换为字符串,我希望将日期值存储在datetime属性中,并使用'yyyy-mm-dd'格式:
问题内容: 我正在尝试从转换日期。我已经使用了mktime()函数和其他函数,但是我似乎无法使其工作。我已经成功地将原始日期用作定界符,但更改格式并将其与交换时没有成功。 任何帮助将不胜感激。 问题答案: 通过查看各个组成部分之间的分隔符,可以消除或格式中的日期的歧义:如果该分隔符是斜杠(),则假定为American ;否则,为0。反之,如果分隔符是破折号()或点(),则采用欧洲格式。 使用默认的
我有一个格式为。我希望它的格式为 下面是我尝试进行此转换的示例util: 但是,我得到的输出不是格式。 请告诉我如何将从格式化为
我从格式为yyyy-mm-dd(加上不需要的hh-mm-ss)的API中获取日期结果。我想在jQuery中将其转换为dd-mm-yyyy格式,最简单/最快的方法是什么? 目前我正在使用:(对于返回的字符串yyyy-mm-dd): 但是好像有点啰嗦。
问题内容: 当我在下面的代码下运行时,出现Unparseable错误。如何将dd MMM yyyy格式转换为dd / MM / yyyy格式? 问题答案: 假设您修复了明显的语法错误,则: 您要做的就是为您需要解析的格式创建一个解析器,并为您想要的格式创建一个格式化器: