Salesforce中处理Datetime时区问题

317 阅读1分钟

在根据系统中的数据给出自定义开发报表时,根据对象中Datetime类型的字段去计算数据所在的月份,因为Datetime类型会有时区的问题,会导致2022-7-31 16:00:00之后的数据实际是在8月份创建的,但是在根据SOQL日期函数计算时会出现计算成7月份的数据

解决:先使用convertTimezone在查询时转换时区,然后将查询出的数据转为本地时间

for(XXXXXX xxx : [SELECT Id,
                                     DateTimeField__c,
                              FROM XXXXXX 
                              WHERE CALENDAR_YEAR(convertTimezone(DateTimeField__c)) = 2022
                              AND CALENDAR_MONTH(convertTimezone(DateTimeField__c)) IN (7,8) ]){        
   DateTime gmtCallDateTime = xxx.DateTimeField__c;
   DateTime localCallDateTime = DateTime.newInstance(gmtCallDateTime.date(), gmtCallDateTime.time());
  xxx.DateTimeField__c = localCallDateTime;
}