从 SqlDataReader 读取的字符串的正确日期格式
Proper date formatting of string read from a SqlDataReader
我正在从 SqlDataReader
读取日期字段,我想将其写入标签。
我的这一行代码如下所示:
lblTDate.Text = string.Format("{0:D}", (DT2(["TDate"].ToString()));
标签显示,例如,“4/7/2016 12:00:00 AM”,但我希望它显示 "Sunday, April 07, 2016"。
我在 this site 上读到,使用 {0:D}
应该可以,但它不起作用。
SQL 服务器 table 中的字段是 Date
字段,而不是 DateTime
字段,这使得时间显示更加令人费解向上。但是,无论如何,我怎样才能让我的标签以我想要的格式显示日期?
试试这个:
lblTDate.Text = Convert.ToDateTime(DT2["TDate"]).ToString("dddd, MMMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture);
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);
您不希望在将 indexer 返回的对象传递给 String.Format 之前将其转换为字符串。通过省略 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 实例的形式 class。
请注意,在上述两个选项中,您不必先将值转换为 DateTime。
我正在从 SqlDataReader
读取日期字段,我想将其写入标签。
我的这一行代码如下所示:
lblTDate.Text = string.Format("{0:D}", (DT2(["TDate"].ToString()));
标签显示,例如,“4/7/2016 12:00:00 AM”,但我希望它显示 "Sunday, April 07, 2016"。
我在 this site 上读到,使用 {0:D}
应该可以,但它不起作用。
SQL 服务器 table 中的字段是 Date
字段,而不是 DateTime
字段,这使得时间显示更加令人费解向上。但是,无论如何,我怎样才能让我的标签以我想要的格式显示日期?
试试这个:
lblTDate.Text = Convert.ToDateTime(DT2["TDate"]).ToString("dddd, MMMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture);
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);
您不希望在将 indexer 返回的对象传递给 String.Format 之前将其转换为字符串。通过省略 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 实例的形式 class。
请注意,在上述两个选项中,您不必先将值转换为 DateTime。