如何仅显示日期时间值的日期部分?
How can I display the Date portion only of DateTime values?
我知道了 class:
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 服务器 table 使用 DateTime 字段。
我像这样填充 class 的实例:
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;
}
...然而网格显示了 DateTime 值和时间值,这对我来说没用;我只想要日期,只有日期。
如何说服显示器停止泄露 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 中显示包含日期和时间的值。
在您的 class 中,使用 DisplayFormat
数据注释。
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString="{0:dd/MMM/yyyy}")]
public DateTime NextExecutionCalcd { get; set; }
Date
属性 仍然是 DateTime
类型,它始终具有时间属性,因此我猜您的 UI 会选择它。
要仅显示日期,请使用 .ToString("d")
我遇到了同样的问题。我不知道这是否是最好的解决方案,但我用这样的正则表达式切断了时间-属性:
Regex.Match(Convert.ToDateTime("01.01.2014 00:00:00").Date.ToString(), @"\d{2}\.\d{2}\.\d{4}").ToString();
这行代码returns仅将日期(在本例中为 01.01.2014)作为字符串。
Regex.Match() 将字符串与模式和 returns 进行比较:在这种情况下,它搜索两个数字 (\d{2})、一个点 (.)、另一个两位数(\d{2} 另一点(.)和4位数字(\d{4}).
要使用 Regex,您需要使用指令 using System.Text.RegularExpressions;
我需要将对“.Date”的调用移到最后一个括号之后,所以不要这样:
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;
我知道了 class:
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 服务器 table 使用 DateTime 字段。
我像这样填充 class 的实例:
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;
}
...然而网格显示了 DateTime 值和时间值,这对我来说没用;我只想要日期,只有日期。
如何说服显示器停止泄露 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 中显示包含日期和时间的值。
在您的 class 中,使用 DisplayFormat
数据注释。
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString="{0:dd/MMM/yyyy}")]
public DateTime NextExecutionCalcd { get; set; }
Date
属性 仍然是 DateTime
类型,它始终具有时间属性,因此我猜您的 UI 会选择它。
要仅显示日期,请使用 .ToString("d")
我遇到了同样的问题。我不知道这是否是最好的解决方案,但我用这样的正则表达式切断了时间-属性:
Regex.Match(Convert.ToDateTime("01.01.2014 00:00:00").Date.ToString(), @"\d{2}\.\d{2}\.\d{4}").ToString();
这行代码returns仅将日期(在本例中为 01.01.2014)作为字符串。
Regex.Match() 将字符串与模式和 returns 进行比较:在这种情况下,它搜索两个数字 (\d{2})、一个点 (.)、另一个两位数(\d{2} 另一点(.)和4位数字(\d{4}).
要使用 Regex,您需要使用指令 using System.Text.RegularExpressions;
我需要将对“.Date”的调用移到最后一个括号之后,所以不要这样:
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;