如何仅显示日期时间值的日期部分

本文关键字:日期部 时间 何仅 显示 日期 | 更新日期: 2023-09-27 18:35:46

我有这个类:

public class ScheduledReports
{
    public string Unit { get; set; }
    public string ReportName { get; set; }
    public DateTime NextExecutionCalcd { get; set; }
    public string AllEmailAddresses { get; set; }
    public DateTime DataRangeBeginDateCalcd { get; set; }
    public DateTime DataRangeEndDateCalcd { get; set; }
}

基础附属 SQL Server 表使用日期时间字段。

我像这样填充类的实例:

while (sqlReader.Read())
{
    ScheduledReports sr = new ScheduledReports();
    . . . // Other class member assignments elided for brevity
    sr.DataRangeBeginDateCalcd = GetNextDataRangeBeginDateAfterQueued(unit, rptName, Convert.ToDateTime(sqlReader["NextExecutionsBeginDateArg"]).Date); 
    sr.DataRangeEndDateCalcd = GetNextDataRangeEndDateAfterQueued(unit, rptName, Convert.ToDateTime(sqlReader["NextExecutionsEndDateArg"]).Date); 
    scheduledRpts.Add(sr);
}

如您所见,我正在使用"Convert.ToDateTime(bla)。Date"而不是简单的"Convert.ToDateTime(bla)",希望从而截断时间部分,但它不起作用;我分配从方法返回的内容,其代码片段如上所示:

private void LoadScheduledTab()
{
    List<ScheduledReports> scheduledRpts = RoboReporterSQL.GetScheduledReports();
    dataGridViewScheduled.DataSource = scheduledRpts;
}

。然而网格显示日期时间值和时间值,这对我来说毫无用处;我只想要日期,只想要日期。

如何说服显示器停止泄露TMI?

更新

我试图像这样实现用户1666620的答案(在添加System.ComponentModel.DataAnnotations之后)作为参考并解决"DisplayFormat"):

public class ScheduledReports
{
    public string Unit { get; set; }
    public string ReportName { get; set; }
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MMM/yyyy}")]
    public DateTime NextExecutionCalcd { get; set; }
    public string AllEmailAddresses { get; set; }
    public DateTime DataRangeBeginDateCalcd { get; set; }
    public DateTime DataRangeEndDateCalcd { get; set; }
}

。但它仍然失败了;它会进行编译,但仍在 DataGridView 中显示包含日期和时间的值。

如何仅显示日期时间值的日期部分

Date 属性仍然是 DateTime 类型,它始终具有时间属性,因此我猜您的 UI 会选择它。

若要仅显示日期,请使用.ToString("d")

在您的

类中使用DisplayFormat数据注释。

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString="{0:dd/MMM/yyyy}")]
public DateTime NextExecutionCalcd { get; set; }

https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayformatattribute.dataformatstring(v=vs.110).aspx

我遇到了同样的问题。我不知道这是否是最好的解决方案,但我用正则表达式切断了时间属性,如下所示:

Regex.Match(Convert.ToDateTime("01.01.2014 00:00:00").Date.ToString(), @"'d{2}'.'d{2}'.'d{4}").ToString();

此行代码仅以字符串形式返回日期(在本例中为 01.01.2014)。

Regex.Match() 将字符串与模式进行比较并返回匹配项:在本例中,它搜索两位数 (''d{2})、一个点 (.)、另外两位数 (''d{2} 另一个点 (.) 和 4 位数字 (''d{4})。

要使用正则表达式,您需要使用指令using System.Text.RegularExpressions;

我需要将调用移动到" .日期"超过最后一个括号,所以代替这个:

sr.DataRangeBeginDateCalcd = GetNextDataRangeBeginDateAfterQueued(unit, rptName, Convert.ToDateTime(sqlReader["NextExecutionsBeginDateArg"]).Date);
sr.DataRangeEndDateCalcd = GetNextDataRangeEndDateAfterQueued(unit, rptName, Convert.ToDateTime(sqlReader["NextExecutionsEndDateArg"]).Date);

。是这样的:

sr.DataRangeBeginDateCalcd = GetNextDataRangeBeginDateAfterQueued(unit, rptName, Convert.ToDateTime(sqlReader["NextExecutionsBeginDateArg"])).Date;
sr.DataRangeEndDateCalcd = GetNextDataRangeEndDateAfterQueued(unit, rptName, Convert.ToDateTime(sqlReader["NextExecutionsEndDateArg"])).Date;