A problem that I recently encountered working on a MOSS project was the inability to customize date formating of the Microsoft.SharePoint.WebControls.DateTimeControl for a setting that is outside the realm of the default formatting for a culture. The default culture short date formatting was dd/mm/yyyy for en-AU but instead I needed it to display in dd MMM yyyy. This control has a LocaleId property but no way of simply customizing the formatting of the selected date value.
All I could find on the net that would work was to redefine the culture setting in the registry using the CultureAndRegionInfoBuilder (as mentioned here: http://sharepointex.blogspot.com/2007/09/how-to-modify-date-format-in-sharepoint.html). This was not ok for me because I was deploying into a shared environment and this would break someone else’s culture-sensitive formatting. So I created a derived class from the DateTimeControl and overrode the OnPreRender event so that I could handle the formatting myself and this did the trick. Here is my code for doing so:
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
namespace TestDerivedControl
{
[Guid("619b97bb-1c70-426e-b3ec-f76c5324be3a")]
TestDerivedControl : System.Web.UI.WebControls.WebParts.WebPart
{
public TestDerivedControl()
{
this.ExportMode = WebPartExportMode.All;
}
protected override void Render(HtmlTextWriter writer)
{
this.RenderChildren(writer);
}
protected override void CreateChildControls()
{
base.CreateChildControls();
// Add the controls here
CustomAUDatePicker obj = new CustomAUDatePicker();
obj.ID = "dtcDate";
obj.AutoPostBack = true;
obj.DateOnly = true;
obj.Visible = true;
obj.SelectedDate = DateTimeNow;
this.Controls.Add(obj);
}
}
public class CustomAUDatePicker : Microsoft.SharePoint.WebControls.DateTimeControl
{
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
TextBox box = (TextBox)this.Controls[0];
DateTime dt = DateTime.Parse(box.Text);
box.Text = dt.ToString("dd MMM yyyy");
}
}
}

What language is that?
-Matt
Thank you for you post, it is very helpful to me.But how to use these codes?I think I should build them to a dll file, but how to do as you said "overrode the OnPreRender event"….Sorry for my stupidity~~~Thanks in advance.
In additional, can this code effect the whole SharePoint application?Or only a SharePoint site collection?Thank you agian^^
A little old maybe – but a useful post.
Just tried to implement the custom time/date format and ran into validation problems. For some reason the validation code fails 😦
I think the code worked back on .NET 2.0 – I am not sure if it still works on later versions of .NET. What version of .NET are you using?
When I initially commented I clicked the “Notify me when new comments are added” checkbox and now each
time a comment is added I get three emails with the same comment.
Is there any way you can remove me from that service?
Thanks!