从SqlDataReader读取的字符串的正确日期格式

时间:2018-01-08 16:52:25

标签: c# sql-server date-formatting

我正在从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字段,这使得时间显得更加令人费解。但是,无论如何,我怎样才能让我的标签以我想看的格式显示日期?

3 个答案:

答案 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);