OK, here is the whole command group again to replace the first version above.
I've added a self-executing command that replaces the day and month formats all at once, after scraping the NBA website. This is a method that anyone can implement with a bit of practice:
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.0.3-->
<commandGroup open="True" name="NBA" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="287" name="scrape NBA schedule" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>File.Delete</cmdType>
<params>
<param>nba.xml</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Scrape</cmdType>
<params>
<param>http://www.nba.com/schedules/national_tv_schedule/</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegExSingle</cmdType>
<params>
<param>"dt">(.*?)</td>.*?"gm">.*?href=".*?">(.*?)</a>.@.<a.*?">(.*?)</a.*?"tm">(.*?)</td.*?shrinkee_(.*?)\.gif</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>File.WriteLine</cmdType>
<params>
<param>nba.xml</param>
<param><?xml version="1.0" encoding="utf-8"?></param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>File.Append</cmdType>
<params>
<param>nba.xml</param>
<param><date>{Match.{i}.1}</date><game>{Match.{i}.2} vs. {Match.{i}.3}</game><time>{Match.{i}.4}</time><channel>{Match.{i}.5}</channel>{cr}</param>
</params>
<cmdRepeat>30</cmdRepeat>
</action>
<action>
<cmdType>File.Read</cmdType>
<params>
<param>nba.xml</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegExReplace</cmdType>
<params>
<param>\r\n<date> </date></param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>File.Write</cmdType>
<params>
<param>nba.xml</param>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.TriggerEvent</cmdType>
<params>
<param>cleanup</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<event>VC.Loaded</event>
<phrase>Update NBA schedule</phrase>
</command>
<command id="306" name="Show upcoming games" enabled="true" alwaysOn="False" confirm="True" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>File.Read</cmdType>
<params>
<param>nba.xml</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegEx</cmdType>
<params>
<param><date>(.*?)</date><game>(.*?)</game><time>(.*?)</time><channel>(.*?)</channel</param>
<param> - </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>Upcoming games are:</param>
<param>6000</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.AddText</cmdType>
<params>
<param>{Match.{i}}</param>
</params>
<cmdRepeat>5</cmdRepeat>
</action>
<action>
<cmdType>TTS.SpeakSync</cmdType>
<params>
<param>Upcoming games are:</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>{Match.{i}}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Show upcoming games</phrase>
</command>
<command id="315" name="Clean up dates" enabled="true" alwaysOn="False" confirm="True" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>File.Read</cmdType>
<params>
<param>nba.xml</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Sun,</param>
<param>Sunday,</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Mon,</param>
<param>Monday,</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Tue,</param>
<param>Tuesday,</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Wed,</param>
<param>Wednesday,</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Thu,</param>
<param>Thursday,</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Fri,</param>
<param>Friday,</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Sat,</param>
<param>Saturday,</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Jan </param>
<param>January </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Feb </param>
<param>February </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Mar </param>
<param>March </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Apr </param>
<param>April </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Jun </param>
<param>June </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Jul </param>
<param>July </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Aug </param>
<param>August </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Sep </param>
<param>September </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Oct </param>
<param>October </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Nov </param>
<param>November </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.Replace</cmdType>
<params>
<param>Dec </param>
<param>December </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>File.Write</cmdType>
<params>
<param>nba.xml</param>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<event>cleanup</event>
</command>
<command id="325" name="Are there any N.B.A. games today?" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Results.SetLastResult</cmdType>
<params>
<param>{DtCustom.MMMM d}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegExReplace</cmdType>
<params>
<param>\s</param>
<param>.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>today</param>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>File.Read</cmdType>
<params>
<param>nba.xml</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegEx</cmdType>
<params>
<param><date>\w.*?{var.today}</date>(.*?)\n</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<if ifBlockDisabled="False" ifNot="False">
<ifType>LastActionSuccess</ifType>
<ifParams>&&</ifParams>
<then>
<action>
<cmdType>Results.SetLastResult</cmdType>
<params>
<param>{Match.1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegEx</cmdType>
<params>
<param>game>(.*?)</game><time>(.*?)</time><channel>(.*?)</channel</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>Today's games:</param>
<param>8000</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.AddText</cmdType>
<params>
<param>{Match.{i}.1} at {Match.{i}.2} on {Match.{i}.3}</param>
</params>
<cmdRepeat>{#M}</cmdRepeat>
</action>
<action>
<cmdType>TTS.SpeakSync</cmdType>
<params>
<param>Today's games are</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>{Match.{i}.1} at {Match.{i}.2}, on {Match.{i}.3}</param>
</params>
<cmdRepeat>{#M}</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>Sorry. No games today. Would you like to see upcoming games?</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.SpeakSync</cmdType>
<params>
<param>Sorry. No games today. Would you like to see upcoming games?</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>VC.TellVox</cmdType>
<params>
<param>Show upcoming games</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<phrase>Are there any games today?</phrase>
</command>
</commandGroup>
My TTS voice actually interprets month abbreviations correctly and reads out the whole name of the month, but I guess that's not a universal feature.