字段的前夕日期时间格式

Eve date time format for for a field

Python3.7::夏娃:

寻找一种方法来格式化域字段的日期时间而不是设置 global 日期时间格式?

我正在尝试存储 yyyy-mm-dd 格式,但我不想更改 _created_update 的工作方式。我最好只存储字符串并处理日期转换作为前端渲染的一部分吗?

--编辑-- 像这样使用验证器会很昂贵吗?

import datetime
from dateutil.parser import parse
from eve.io.mongo import Validator


class MyValidator(Validator):
    """
    Extend / override the built-in validation rules
    """
    def _validate_is_yyyymmdd(self, is_yyyymmdd, field, value):
        """datetime format yyyy-mm-dd"""
        print(is_yyyymmdd, field, value)
        print(datetime.datetime.strptime(value, r'%Y-%m-%d'))
        print(is_yyyymmdd and datetime.datetime.strptime(value, r'%Y-%m-%d'))
        try:
            if is_yyyymmdd and datetime.datetime.strptime(value, r'%Y-%m-%d'):
                return
        except:
            self._error(field, "Value is not valid yyyy-mm-dd")

volumes.py

volumes = {


'schema':{      
    'record_date':{
        'type':'string',
        'is_yyyymmdd':True,
        },             
    'volume_gallons':{'type':'float'},
}

已解决 - 更新

DATE_FORMAT = r"%Y-%m-%dT%H:%M:%S.%f%Z%z"

使用新的日期格式,可以提交带有时区调整的负载,然后将其作为 UTC 存储在 mongo 中。

        {
        "record_date":"2019-04-06T15:49:12.012UTC+0500",                
        "group":"horizontal",
        "program_year":2016
        }

python 帮助从给定时间转换为 utc 的脚本

from datetime import datetime
from dateutil import tz
from dateutil.parser import parse


def main():
    """
    modified solution found here: 
    """


    # set the time zones to convert from and to
    # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
    from_zone = tz.gettz('America/Denver')
    to_zone = tz.tzutc()


    # This is the format SQL Server outputs date time   
    datetime_str = "2019-03-21 02:37:21"

    # local = datetime.strptime(datetime_str, '%Y-%m-%d %H:%M:%S')
    local = parse(datetime_str)

    # Tell the datetime object that it's in local time zone since 
    # datetime objects are 'naive' by default
    local = local.replace(tzinfo=from_zone)

    # Convert time zone
    utc = local.astimezone(to_zone)
    print(utc, local)


if __name__ == "__main__":
    main()

将数据库字段保留为最不可知的格式通常是个好主意。

创建一个方法来处理转换细节。

如果您对每次需要输出日期时输入完整 date/time 转换的前景感到恼火,您可以在对象中创建一个方法,以您的方式处理转换喜欢。

这样一来,您就可以给它起一个容易记住的名字,从而省去记住日期/时间格式函数的确切符号的麻烦。

您甚至可以为您的对象创建一个 super-class,并在其中添加该方法,这样它就会被您希望具有此行为的所有对象继承。

因此,如果您将 BlogObject class 作为 super-class,并且 BlogPost 继承自 BlogObject,并且您正在访问所有这些对象中存在的标准字段,例如创建日期或日期已修改

class BlogObject(BaseClassName):
    def pretty_create_dt():
        self.beatify_date(self.update_dt)

    def beautify_date(date):
        #[your format code]

#then have the other class(es) inherit the method:

class BlogPost(BlogObject):
    def get_xmas_date_before(days_before_xmas):
        date_x_before_christmas = self.beautify_date(self.xmas_dt - days_before_xmas)
        #pseudo-code-ish, just to get the point across

这样,当您从模板中调用函数时,模型或控制器已经对其进行了格式化。你应该避免在视图中做这种事情,因为这是不好的 MVC 实践,特别是对于你计划利用的东西 application-wide.

这是 generally-accepted 模式的原因是

  1. 它减少了容易出现人为错误的重复代码处理

  2. 为了以后的发展少work-intensive

  3. 它保持了 MVC 框架固有的“职责分离”

    例如,如果日期格式政策发生变化,可能是由于国际化,那么您需要一个可以在一个位置(模型或控制器 super-class)而不是 1,000 个位置进行修改的解决方案查看实例