我正在从SqlDataReader
读取日期字段,我想将其写入标签。
此行的代码如下所示:
lblTDate.Text = string.Format("{0:D}", (DT2(["TDate"].ToString()));
标签显示,例如,“2016年4月7日上午12:00:00”,但我希望它显示“2016年4月7日星期日”。
我在this site上看到使用{0:D}
应该这样做,但它不起作用。
SQL Server表中的字段是Date
字段,而不是DateTime
字段,这使得时间显得更加令人费解。但是,无论如何,我怎样才能让我的标签以我想看的格式显示日期?
答案 0 :(得分:4)
试试这个:
lblTDate.Text = Convert.ToDateTime(DT2["TDate"]).ToString("dddd, MMMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture);
答案 1 :(得分:0)
在将其移交给String.Format之前,您不希望将从indexer返回的对象转换为字符串。通过省略ToString
电话,你会得到你想要的。
lblTDate.Text = string.Format("{0:D}", DT2["TDate"]);
这使得String.Format实现能够使用DateTime类型的IFormattable
实现,这使得您找到的格式字符串可以正常工作。一旦它是一个字符串,String.Format实现就无法知道该怎么做。
或者将值转换为IFormattable接口,如下所示:
var fmt = DT2["creationdate"] as IFormattable;
if (fmt != null)
{
lblTDate.Text = fmt.ToString(
"dddd, MMMM dd, yyyy",
System.Globalization.CultureInfo.InvariantCulture);
}
但是你必须提供一个IFormatProvider实现,通常是以CultureInfo类的实例的形式。
请注意,在上述两个选项中,您不必先将值转换为DateTime。
答案 2 :(得分:-2)
CultureInfo culture = new CultureInfo("en-Us");
DateTimeFormatInfo dtfi = culture.DateTimeFormat;
var myDate = new DateTime(2016, 7, 4, 12, 0, 0);
string month = culture.TextInfo.ToTitleCase(dtfi.GetMonthName(myDate.Month));
string dayOfWeek = culture.TextInfo.ToTitleCase(dtfi.GetDayName(myDate.DayOfWeek));
string fullDate = $"{dayOfWeek}, {month} {myDate.Day}, {myDate.Year}";
Console.Write(fullDate);