yo personalmente formatearlo en dos partes: la parte no-am/pm, y la parte de am/pm con ToLower:
string formatted = item.PostedOn.ToString("dddd, MMMM d, yyyy a\\t h:mm") +
item.PostedOn.ToString("tt").ToLower();
Otra opción (que voy a investigar en un segundo) es para agarrar la corriente DateTimeFormatInfo, crear una copia, y establecer las am/pm designadores a la versión en minúsculas. Luego use esa información de formato para el formato normal. Lo que quiere almacenar en caché el DateTimeFormatInfo, obviamente ...
EDIT: A pesar de mi comentario, he escrito el bit de almacenamiento en caché de todos modos. Probablemente no será más rápido que el código anterior (ya que implica una cerradura y una búsqueda de diccionario) pero sí lo hace el código de llamada simple:
string formatted = item.PostedOn.ToString("dddd, MMMM d, yyyy a\\t h:mmtt",
GetLowerCaseInfo());
Aquí es un programa completo para demostrar:
using System;
using System.Collections.Generic;
using System.Globalization;
public class Test
{
static void Main()
{
Console.WriteLine(DateTime.Now.ToString("dddd, MMMM d, yyyy a\\t h:mmtt",
GetLowerCaseInfo());
}
private static readonly Dictionary<DateTimeFormatInfo,DateTimeFormatInfo> cache =
new Dictionary<DateTimeFormatInfo,DateTimeFormatInfo>();
private static object cacheLock = new object();
public static DateTimeFormatInfo GetLowerCaseInfo()
{
DateTimeFormatInfo current = CultureInfo.CurrentCulture.DateTimeFormat;
lock (cacheLock)
{
DateTimeFormatInfo ret;
if (!cache.TryGetValue(current, out ret))
{
ret = (DateTimeFormatInfo) current.Clone();
ret.AMDesignator = ret.AMDesignator.ToLower();
ret.PMDesignator = ret.PMDesignator.ToLower();
cache[current] = ret;
}
return ret;
}
}
}
Más información en http://stackoverflow.com/questions/448634/how-to-format-a-datetime-like-oct-10-2008-1043am-cst-in-c – tvanfosson