Integer year = 2021, mon=02, day=12, hour=23, min=50; Datetime dtGMT = Datetime.newInstanceGMT(year, mon, day, hour, min, 0); String exTimezone = 'America/Los_Angeles'; String dateTimeForamat = 'yyyy-MM-dd HH:mm:ssz'; String schedulerFormat = 'mm:HH:dd:MM:yyyy'; String crnTemplate = '0 {0} {1} {2} {3} ? {4}'; String localFromatted = dtGMT.format(dateTimeForamat, UserInfo.getTimeZone().getId()); String exFormatted = dtGMT.format(dateTimeForamat, exTimezone); Datetime localDTValueGMT = Datetime.valueOfGMT(localFromatted); Datetime exDTVaueGMT = Datetime.valueOfGMT(exFormatted); Integer minDiff = (Integer)(localDTValueGMT.getTime() - exDTVaueGMT.getTime())/60000; Datetime scheduleDTGMT = dtGMT.addMinutes(minDiff + 15); String schFormmated = scheduleDTGMT.formatGMT(schedulerFormat); String cronExp = String.format(crnTemplate, schFormmated.split(':')); System.debug('dtGMT : ' + JSON.serialize(dtGMT)); System.debug('localDTValueGMT : ' + JSON.serialize(localDTValueGMT)); System.debug('exDTVaueGMT : ' + JSON.serialize(exDTVaueGMT)); System.debug('scheduleDTGMT : ' + JSON.serialize(scheduleDTGMT)); System.debug('cronExp: ' + cronExp);