繁体   English   中英

如何使用自定义日期格式 OData V4 Edm.DateTime 值

[英]How to use custom date format an OData V4 Edm.DateTime value

我正在努力格式化 OData V4 Edm.DateTime 值。 当我将其声明为正常的日期时间值时

<Label text="{ams>Major}.{ams>Minor}.{ams>Build} (
        { 
          path: 'ams>CreationDate', 
          type: 'sap.ui.model.type.Date', 
          formatOptions: {
            pattern: 'yyyy/MM/dd'
          }
        })"/>

我收到以下错误:

TypeError: j.getTime is not a function

如果我使用 OData 数据类型声明它,则不会格式化任何内容。

<Label text="{ams>Major}.{ams>Minor}.{ams>Build} (
        { 
          path: 'ams>CreationDate', 
          type: 'sap.ui.model.odata.type.Date', 
          formatOptions: {
            pattern: 'yyyy/MM/dd'
          }
        })"/>

推出例如:

2016-11-21T17:13:56.207+01:00

是否有可能直接在 XML 模板中对其进行格式化,还是必须使用自定义格式化程序?

我会使用自定义格式化程序。 它们是为此类任务创建的,如果您有多个日期,则可以重复使用相同的格式化程序(这很酷)。

改进答案:

正如 SAP 支持所指出的,这是使用 OData V4 时要走的路:

<Text text="{
              path: 'agent>/CurrentVersion/CreationDate',
              type: 'sap.ui.model.odata.type.DateTimeOffset',
              constraints: {
                precision: 3,
                v4: true
              },
              formatOptions: {
                pattern: 'dd. MM. yyyy'
              }
            }"
            tooltip="{
              path: 'agent>/CurrentVersion/CreationDate',
              type: 'sap.ui.model.odata.type.DateTimeOffset',
              constraints: {
                precision: 3,
                v4: true
              },
              formatOptions: {
                pattern: 'dd. MM. yyyy - hh:mm:ss'
              }
            }"/>

重要的部分是给出精度。 我的 OData 服务 (ASP.NET WEB API) 以毫秒返回 datetimeoffset。 因此,精度必须设置为 3。

原答案:

此外,由于我遇到了一些问题,这是我使用自定义格式化程序的方法:

不能使用通用日期格式的原因是 odata 值作为字符串出现。 我在控制器和dateformat.js脚本上使用了自定义格式化程序。

<Label text="{parts: [{path: 'mymodel>CreationDate', type: 'sap.ui.model.odata.type.Date'},
                        {path: 'i18n>global.dateformat', type: 'sap.ui.model.type.String'}],
                formatter: '.odatadateformatter'}"/>

这是我的格式化程序代码(打字稿):

var dateFormat: DateFormatStatic;
...
odatadateformatter(datetime: sap.ui.model.odata.type.Date, format?: string): string {
            if(!format)
                format = "yy-mm-dd:hh:MM:ss";
            return dateFormat(new Date(datetime), format);
        }

任何其他方法都会导致错误。 您现在可以根据您的 i18n 信息相应地调整您的日期,因此您可以为不同的国家/地区使用不同的格式。 我认为还有一个选项可以在 dateFormat(...) 函数中放入语言环境

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM