如何解析和转换日期和时间?

How Can I parse and convert Dates & Times?

不到一个月前,我第一次见到 Odoo,作为一名 90 年代的 DOS 系统分析师,我正在帮助一家小型但发展迅速的本地制造商实施它。在过去的 15 年里,我基本上不在这个行业,我不是专业人士,但学习速度很快 Python、HTML(一些过去的专家)和 Java...

我已经阅读了 Developer Docs,以及开发人员的 Cookbook 和 Essentials,以及各种在线教程(几乎所有 Google 都可以通过几个搜索词组合得出).

我阅读了已关闭的 post 询问这个问题并了解到显然没有实际的 Odoo 参考...

有人可以告诉我在哪里可以找到 'date/time' 解析和转换函数,我可以从使用 'canned' 'hr.employee' 模型的报告中访问这些函数吗?

<?xml version="1.0"?>
<t t-name="hr_attendance.report_attendancelog">
    <t t-call="report.html_container">
        <t t-call="report.external_layout">
            <div class="page">
                <div class="oe_structure"/>
                <div class="row">
                    <div class="col-xs-6">
                        <h2><br/>Attendance Log: </h2>
                    </div>
                </div>
                <table class="table table-condensed mt32">
                    <thead>
                        <th><strong>Date / Time</strong></th>
                        <th><strong> Operation</strong></th>
                    </thead>
                    <tbody>
                        <t t-foreach="docs" t-as="o">
                            <t t-set="DspDate" t-value="o.name"/>
                            <t t-set="DspTime" t-value="o.name"/>

<!-- I want to parse 'o.name', which is 'date time' format (from
             Attendance record) to separate 'Date' and 'Time' fields... -->
                        <!-- t t-set="DspDate" t-value="FUNC?(o.name)"/ -->
                        <!-- t t-set="DspTime" t-value="FUNC?(o.name)"/ -->
<!-- and do calcs with date & time...) -->
                        <!-- t t-set="ClcDt1" t-value="FUNC?('PrvDt')"/ -->
                        <!-- t t-set="ClcDt2" t-value="FUNC?(DspDate)"/ -->
                        <!-- t t-set="ClcTm1" t-value="FUNC?('PrvTm')"/ -->
                        <!-- t t-set="ClcTm2" t-value="FUNC?(DspTime)"/ -->

                            <tr>
                                <t t-if="ClcDt1 == ClcDt2">
                                    <td><span t-esc="DspDate"/></td>
                                    <td><span t-esc="DspTime"/></td>
                                    <td><span t-esc="o.action"/></td>
                                </t
                            </tr>
                        </t>
                        <tr class="border-black">
                            <td colspan="3"><strong>Total period</strong></td>
                            <td><strong t-esc="o.worked_hours"/></td -->
                        </tr>
                    </tbody>
                </table>
            </div>
        </t>
    </t>
</t>

我在 H2 前加了 'br/' 前缀以保持它的正确位置(仅显示在第一页上),但后续页面遮挡了布局 header 后面的列 header。 .. 这可能是显而易见的,我没有注意到,但是我如何将 'H2' 位置调整为低于 'report.external_layout' 设置的 'header'?

在 QWeb 渲染上,您可以使用 python 库时间、日期时间和相对增量。它们包含在所谓的 QWeb 上下文中,该上下文用于报告中代码的评估 (python eval)。您可以在 Odoo 代码 here.

中看到这一点

这意味着你要做这样的事情:

<t t-set="DspDate" t-value="datetime.datetime.strptime(o.name, '%Y-%m-%d %H:%M:%S').strftime('%d/%m/%Y')" />

我更喜欢报表解析器 类 来定义一些常用函数。例如:您可以定义函数 getDate 来进行解析或转换。带有解析器函数的报告代码会更好:

<t t-set="DspDate" t-value="getDate(o.name)" />