提问人:Michelle Soto 提问时间:9/16/2023 最后编辑:Mark RotteveelMichelle Soto 更新时间:9/16/2023 访问量:56
Salesforce 中的 SLA 到期日期计算
SLA expiration date calculation in Salesforce
问:
如何创建 Apex 代码,以计算周一至周五上午 8 点至下午 6 点以及周六上午 8 点至下午 1 点 72 小时服务的确切日期/时间,同时考虑到假期并使用初始日期作为基础?换句话说,我需要为该方法提供开始日期和服务时间,以便它可以计算最终日期。
我将提供两个示例:
我的初始日期/时间是 01/09/2023 08:00 am,我的服务时间是 8,所以我的最终日期应该是 01/09/2023 04:00 pm。
我的初始日期/时间是 01/09/2023 08:00:00,我的服务时间是 12,所以我的最终日期应该是 02/09/2023 10:00:00。在此示例中,由于我的日程安排是从周一至周五上午 8 点到下午 6 点,因此它会跳到第 2 天,因为在第 1 天下午 6 点之后,它直到第二天才计算在内,从早上 8 点开始。
我尝试了以下代码,但它没有给我预期的结果。
public class DateTimeCalculator {
// Method to calculate the final date/time
public static Datetime calculateFinalDatetime(Datetime initialDatetime, Integer serviceHours) {
Integer dailyWorkHours = 8;
Datetime finalDatetime = initialDatetime;
List<Date> holidays = new List<Date>{Date.newInstance(2023, 9, 4)}; // List of holidays
while (serviceHours > 0) {
if (isWorkingDay(finalDatetime)) {
Integer hoursUntilEndOfDay = (finalDatetime.addHours(18).getTime() - finalDatetime.getTime()) / 3600000;
if (serviceHours <= hoursUntilEndOfDay) {
finalDatetime = finalDatetime.addHours(serviceHours);
serviceHours = 0;
} else {
finalDatetime = finalDatetime.addHours(16); // Adjust to 8 am of the next day
finalDatetime = finalDatetime.addDays(1);
serviceHours -= hoursUntilEndOfDay;
}
} else {
finalDatetime = finalDatetime.addHours(16); // Adjust to 8 am of the next day
finalDatetime = finalDatetime.addDays(1);
}
}
return finalDatetime;
}
// Method to check if a day is a working day
private static Boolean isWorkingDay(Datetime day) {
// Define working days (Monday to Friday) and Saturdays
return (day.format('E') != 'Sat' && day.format('E') != 'Sun') ||
(day.format('E') == 'Sat' && day.hour() >= 8 && day.hour() < 13);
}
}
答:
0赞
eyescream
9/16/2023
#1
有一种更好的方法,内置方法可以进行此计算,包括周末、节假日、夏令时......
转到设置 - > 工作时间。配置您的开放时间和几个公共假期。然后阅读有关 https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_classes_businesshours.htm 的信息或搜索有关它的问题,例如 https://stackoverflow.com/a/69723001/313628 和 https://stackoverflow.com/a/75553533/313628。
评论
0赞
Michelle Soto
9/20/2023
感谢您提供的信息,它可以解决问题。
评论