A few years ago, the answer to my inquiry was to research the IdeaExchange. The idea already existed then and unfortunately is still just an idea today.
IdeaExchange Link: http://success.salesforce.com/ideaView?c=09a30000000D9xtAAC&id=08730000000Bpq3AAC
What a shame!
Is there anything you can do? Absolutely, but I hope you like Apex Triggers.
There is a BusinessHours Class that you can read about in the Apex Developer's Guide: http://www.salesforce.com/us/developer/docs/apexcode/index.htm?businesshours
The first thing you want to do before you start playing around with that, though, is to set up your business hours by going to Setup --> Administration Setup --> Company Profile --> Business Hours
For my example, I'll have a default schedule of Monday through Friday, 8AM to 7PM.
I've also set up some holidays through Setup --> Administration Setup --> Company Profile --> Holidays. Don't forget to go back to your Business Hour schedule and add the holidays to it by clicking on the "Add/Remove" button.
Got that configured? Now you're ready to give it a whirl.
Of course you'll want to work this into a trigger, but for demonstration purposes I've just created a test class and pulled in the system date/time (system.now()).
The VF Page:
<apex:page controller="test_business" >
<apex:form >
Current Date: {!oldDate}
<br /><br />
New (w/ GMT): {!newDateGMT}
</apex:form>
</apex:page>
Explanation: Just two simple getter methods from the test class.
- oldDate is simply pulling in the current date/time using the system.now() method.
- newDateGMT is returning the adjusted date/time according to the line w/in that getter method
The Class:
public with sharing class test_business {
public DateTime getoldDate(){
DateTime oldDate = system.now();
return oldDate;
}
public DateTime getnewDateGMT(){
BusinessHours bh = [SELECT Id FROM BusinessHours WHERE IsDefault=true];
Datetime oldDate = system.now();
Datetime newDate = BusinessHours.addGMT(bh.id, oldDate, 3 * 60 * 60 * 1000L);
return newDate;
}
}
Class Explanation:
- getoldDate just retrieves the system.new() method as explained above. This is the full GMT value, not adjusted for your time zone.
- getnewDateGMT has two main parts
- The query is creating a BusinessHours object named bh after retrieving the one I created earlier and set as the default.
- Where I declare the newDate Datetime, I'm taking advantage of the addGMT method in the businesshours class. I need to feed to it the ID of a BusinessHours object, a starting date, and my increment (in milliseconds). Broken down, that looks like this:
- 3 - # of hours
- 60 - 60 seconds in a minute
- 60 - 60 minutes in an hour
- 1000L - 1000 milliseconds in second