当前位置: 首页 > 知识库问答 >
问题:

保持约会时间。使用Flask的jsonify时,日期为“yyyy-mm-dd”格式

拓拔弘化
2023-03-14

出于某种原因,< 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()解决方案不起作用。

共有3个答案

端木令雪
2023-03-14

您可以更改应用程序的.json_encoder属性,实现JSONEncoder的变体,根据您认为合适的方式格式化日期。

东郭宏深
2023-03-14

日期时间。日期不是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,而是得到一个字符串。(如果你确实得到了一个日期,它怎么知道返回日期而不是日期时间

赵俊晤
2023-03-14

按照这个片段,您可以这样做:

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格式? 问题答案: 假设您修复了明显的语法错误,则: 您要做的就是为您需要解析的格式创建一个解析器,并为您想要的格式创建一个格式化器: