SAPUI5技术问询:DateTimePicker与UTC格式时间戳模型值适配异常解决方案咨询
解决UI5 DateTimePicker UTC时间戳存储与本地时间选择的时区转换问题
这个问题是UI5处理时区转换时的典型场景,核心是要让DateTimePicker明确知道模型存储的是UTC时间戳,同时在用户选择本地时间后自动转换为UTC格式存入模型,无需自定义格式化函数。
问题根源
你之前的配置valueFormat ="yyyyMMddHHmmssSSS Z"会让组件将用户选择的本地时间直接加上本地时区标识(比如+0100)存入模型,但没有做时区转换——也就是把本地时间转成UTC时间后再生成时间戳,所以才会出现模型值保留本地时间+时区的异常情况。
标准解决方案:使用sap.ui.model.type.DateTime绑定类型
我们可以通过绑定类型来接管时区转换逻辑,让UI5自动处理“UTC存储 ↔ 本地显示”的转换:
<DateTimePicker id="dp_lastUsedDate" displayFormat="dd.MM.yyyy HH:mm:ss" <!-- 控制界面显示的格式,匹配你的需求 --> value="{ path: 'mdlPRTData>mp_last_used_date', type: 'sap.ui.model.type.DateTime', formatOptions: { // 定义模型中原始值的格式与时区:UTC的yyyyMMddHHmmssSSS字符串 source: { pattern: 'yyyyMMddHHmmssSSS', timezone: 'UTC' }, // 定义写入模型时的格式与时区:将本地时间转成UTC后,生成yyyyMMddHHmmssSSS字符串 pattern: 'yyyyMMddHHmmssSSS', timezone: 'UTC' } }" />
为什么这个配置有效?
- 读取模型值时:
sap.ui.model.type.DateTime会识别模型中的UTC时间戳,自动转换为你的本地时区(GMT+1)时间,按照displayFormat显示。 - 写入模型值时:当你选择本地时间(比如19.11.2021 16:33:15),类型会自动将这个本地时间转换为UTC时间(19.11.2021 15:33:15),再格式化为
yyyyMMddHHmmssSSS的字符串(即20211119153315000)存入模型,完全符合你的期望。
额外说明
- 不需要再设置组件的
valueFormat,因为绑定类型已经接管了格式和时区的处理逻辑。 displayFormat可以根据你的UI需求调整,比如dd.MM.yyyy HH:mm:ss就是你之前看到的显示格式。
内容的提问来源于stack exchange,提问作者Raoul Gerbi
相关产品推荐
相关产品推荐

