This came up on twitter from @britishboyindc:
Why does this return ‘Wed’?
Date myDt = system.today(); DateTime myDtTime = (DateTime) myDt; system.debug(myDtTime.format('E'));
For a user with the Pacific Standard Time
TimeZonethis is currently returning ‘Wed’ when it is Thursday.
I’ve also found the following assertion fails:
DateTime myDateTime = System.today(); System.assertEquals(myDateTime.day(), System.today().day());
System.AssertException: Assertion Failed: Expected: 6, Actual: 7
Why does assigning the DateTime to a variable change the value?
The problem was with initializing the
DateTime variable by casting from a
Date. As the Date had no Timezone information, the resulting DateTime was created at UTC+0. For Pacific Standard Time at the point of testing this put the current DateTime on the previous day.
Instead of directly casting the Date to a DateTime, the DateTime.newInstance(date, time) method should be used to construct the DateTime in the local time zone.
E.g. This will pass the assertion.
DateTime myDateTime = DateTime.newInstance(System.today(), Time.newInstance(0,0,0,0)); System.assertEquals(myDateTime.day(), System.today().day());