在根据系统中的数据给出自定义开发报表时,根据对象中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;
}