SAP UI5 日期类型 sap.ui.model.type.Date 的解析格式问题分析

简介: SAP UI5 日期类型 sap.ui.model.type.Date 的解析格式问题分析

我开发了一个 SAP UI5 应用,使用了数据类型 sap.ui.model.type.Date,并且指定了显示格式 pattern 为:yyyy-MM-ddTHH:mm:ss

<ObjectAttribute title="{i18n>dateTitle}" text="{
                    path: 'invoice>ShippedDate',
                    type: 'sap.ui.model.type.Date',
                    formatOptions: {
                      style: 'long',
                      source: {
                        pattern: 'yyyy-MM-ddTHH:mm:ss'
                      }
                    }
                  }"/>

这个字段绑定的数据源的值为:2015-04-01T01:20:59

我期望在 SAP UI5 上显示的格式为 某年-某月-某日-T-小时-分-秒,但是最后的显示效果如下图:April 1,2015


本文介绍如何分析这个显示格式的问题。

我们在 Chrome 开发者工具里找到 sap.ui.model.type.Date 的实现文件地址:

sap/ui/model/type/Date.js

首先在函数 Date1.prototype.formatValue 设置断点,观察到字符串类型的原始值,已经成功传入该函数了:


sInternalType 的值:string

string 类型的 PrimitiveType 值就为其本身。

该逻辑定义在如下函数里:

SimpleType.prototype.getPrimitiveType = function (sInternalType) {
    // Avoid dealing with type objects, unless really necessary
    switch (sInternalType) {
      case "any":
      case "boolean":
      case "int":
      case "float":
      case "string":
      case "object":
        return sInternalType;
      default:
        var oInternalType = DataType.getType(sInternalType);
        return oInternalType && oInternalType.getPrimitiveType().getName();
    }
  };

从模型中拿到格式数据的模板:

比如一周七天的缩写单词,存储在 aDaysAbbrev 里:


一年 12 个月的单词,存储在 aMonthsWide 里:

进入 parse 函数内部,Calendar type 为:Gregorian,意思是阳历


Calendar type 为枚举值,所有支持的 calendar 类型如下图所示:

格式化数组的值:aFormatArray


已经成功解析出 2015年4月2日了:

开始解析:T01:20:30


所有可能的日期分隔符

\u002d\u007E\u2010\u2011\u2012\u2013\u2014\ufe58\ufe63\uff0d\uFF5E


Dateformat.js 函数的 _parse 函数的返回值,已经观察到小时,分和秒已经成功解析了。所以问题没有出在解析,而是在值的显示上。


最后返回的值:Thu Apr 02 2015 01:20:30 GMT+0800 (China Standard Time

相关文章
|
9天前
|
前端开发 Java
SpringBoot之数组,集合,日期参数的详细解析
SpringBoot之数组,集合,日期参数的详细解析
13 0
|
2月前
|
机器学习/深度学习 算法 编译器
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
【C++ 泛型编程 中级篇】深度解析C++:类型模板参数与非类型模板参数
47 0
|
2月前
|
存储 JSON 安全
【C++ 泛型编程 综合篇】泛型编程深度解析:C++中的五种类型泛型策略综合对比
【C++ 泛型编程 综合篇】泛型编程深度解析:C++中的五种类型泛型策略综合对比
65 1
|
5天前
|
XML 存储 数据格式
探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义
DTD(文档类型定义)用于定义XML文档的结构和合法元素、属性。它允许不同团体就数据交换标准达成一致,并用于验证XML数据的有效性。DTD可通过内部声明(在XML文档内)或外部声明(在单独文件中)来定义。内部声明示例显示了如何定义`note`元素及其子元素的结构,而外部声明则引用外部DTD文件。元素、属性、实体和PCDATA/CDATA是XML构建模块。DTD中,元素通过ELEMENT声明定义,属性通过ATTLIST声明定义,实体声明提供特殊字符或外部资源的快捷方式。
9 0
|
7天前
|
存储 缓存 NoSQL
Redis 命令全解析之 Hash类型
Redis 命令全解析之 Hash类型
|
7天前
|
存储 消息中间件 缓存
Redis 命令全解析之 String类型
Redis 命令全解析之 String类型
11 1
|
8天前
|
JavaScript 前端开发 编译器
TypeScript中的高级类型:联合类型、交叉类型与条件类型深入解析
【4月更文挑战第23天】探索TypeScript的高级类型。这些特性增强类型系统的灵活性,提升代码质量和维护性。
|
28天前
|
存储 编译器 Linux
解析编程中不可或缺的基础:深入了解结构体类型
解析编程中不可或缺的基础:深入了解结构体类型
33 2
|
2月前
|
算法 Serverless 数据安全/隐私保护
【C++ 函数 基本教程 第三篇 】深度解析C++函数类型:探寻全局函数、成员函数与静态函数的奥秘
【C++ 函数 基本教程 第三篇 】深度解析C++函数类型:探寻全局函数、成员函数与静态函数的奥秘
43 1
|
2月前
|
存储 编译器 C语言
【C/C++ POD 类型】深度解析C++中的POD类型:从理论基础到项目实践
【C/C++ POD 类型】深度解析C++中的POD类型:从理论基础到项目实践
71 0

热门文章

最新文章

推荐镜像

更多