For more on the problem, see see my recent post on the issue. For more on the fix, see that Adobe technote or read on for some additional details.
BackgroundTwo weeks ago, I shared that other blog post reporting a problem discovered with CF2021, where a new Dateformat mask of D had been added, for "day of year" (for the dateformat and lsdateformat functions, perhaps among others.)
That would be fine, except that CF had traditionally not paid attention to the case of datemask values. So with this change, existing code that might refer, for example, to a dateformat mask of "MM-DD-YYYY" would produce today a date of "12-342-2020". With the fix implemented, the mask would produce instead a date (today) of 12-07-2020.
Of course, another way to get the "correct" date would be to change the dateformat mask to use a lowercase d, as in "mm-dd-yyyy".
Implementing the hotfix
There are three relatively simple steps to cause this new/corrected behavior, as documented in the aforementioned Adobe technote:
- Download the hotfix jar. (This step and the next one will likely not be needed once the first formal CF2021 "update" comes out. Indeed, this link may fail to work soon after that first formal CF2021 update, in which case just skip here to step 3.)
- Place this jar file into the cfusion/lib/updates folder within CF2021.
- Add the following JVM argument to CF's jvm arguments: -Dcoldfusion.datemask.useDasdayofmonth=truewhether by editing those in the CF Admin "Java & JVM" page, or edit the jvm.config, found in the cfusion/bin folder within CF2021. (The latter option is safer, as you can more easily save a backup of the file and revert it, if you make any mistake.)
If you have created another instance, using the Instance Manager feature in the CF Admin in the Enterprise, Trial, or Developer edition, you would need to repeat those steps for that instance, with regard to its own folder as a sibling to cfusion, as well as its own CF Admin.
Finally, I mentioned above that the jar will not likely need to be updated once the first real "update" to CF2021 comes out. Similarly, it's likely that the update would also remove that jar file, so you need not to bother. I discuss this matter of applying such "special hotfixes" in this blog post.
What if I DO want to use "D" for "day of year"
Of course, if you ever DO want to use D as "day of year", you'd want to either remove that JVM argument or set its value to "false".
Just know then that you must then be sure to find and correct any references to "D" in dateformat masks which you really mean to mean to return "day of month".
Great to see Adobe respond to this issue so quickly.
And while we can lament that they didn't anticipate this issue previously, see my first post for a couple of points to keep in mind in that regard: first, the "D" value is a long-valid Java date mask for "day of year" (which CF was only finally implementing), and second, Lucee has the same "problem" of currently ignoring the case of dateformat masks (so that they'd have the same issue if they ever tried to implement this "D" mask value.
For more content like this from Charlie Arehart:
Need more help with problems?
- Signup to get his blog posts by email:
- Follow his blog RSS feed
- View the rest of his blog posts
- View his blog posts on the Adobe CF portal
- If you may prefer direct help, rather than digging around here/elsewhere or via comments, he can help via his online consulting services
- See that page for more on how he can help a) over the web, safely and securely, b) usually very quickly, c) teaching you along the way, and d) with satisfaction guaranteed