Acumatica网格显示时间比数据库值早4小时如何解决
可行解决方案如下:
- 修正DAC字段配置
确认PXDBDateAndTime属性配置无误,同时将默认值的来源修改为带时间的业务时间,避免默认值仅保留日期部分:
#region TodaysDate public abstract class todaysDate : PX.Data.IBqlField { } [PXDBDateAndTime(UseTimeZone = false, PreserveTime = true, DisplayNameDate = "Date", DisplayNameTime = "Time")] // 替换原有的AccessInfo.businessDate为带时间的类型 [PXDefault(typeof(AccessInfo.businessDateTime))] public virtual DateTime? TodaysDate { get; set; } #endregion
如果需要彻底阻断时区转换逻辑,可在字段的Getter中强制指定时间的Kind为未指定类型:
private DateTime? _TodaysDate; public virtual DateTime? TodaysDate { get { return _TodaysDate == null ? null : DateTime.SpecifyKind(_TodaysDate.Value, DateTimeKind.Unspecified); } set { _TodaysDate = value; } } #endregion
- 修改ASPX页面控件属性
当前控件配置会触发前端二次时区转换,需要修改两处配置:
- 行模板内的
PXDateTimeEdit控件,将AlreadyLocalized改为True,关闭前端时区转换逻辑:
<px:PXDateTimeEdit ID="edTodaysDate" runat="server" AlreadyLocalized="True" DataField="TodaysDate" IsClientControl="False" InputMask="hh:mm"> </px:PXDateTimeEdit>
- 网格列配置中给
TodaysDate列添加AlreadyLocalized="True"属性:
<px:PXGridColumn DataField="TodaysDate" Width="102px" DisplayFormat="g" AlreadyLocalized="True"> </px:PXGridColumn>
- 验证配置生效
修改完成后清除浏览器缓存和Acumatica系统缓存,重新打开页面验证时间显示是否和数据库存储值完全一致。
内容的提问来源于stack exchange,提问作者DanielMoncadaZ
相关产品推荐
相关产品推荐

