我上过这堂课:
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表使用DateTime字段。
我像这样填充类的实例:
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之后)作为参考并解析&#34; DisplayFormat&#34;):
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中显示日期和时间的值。
答案 0 :(得分:3)
Date
属性仍然是DateTime
类型,它始终具有时间属性,因此我的UI会启动它。
要仅显示日期,请使用.ToString("d")
答案 1 :(得分:2)
在您的课程中,使用DisplayFormat
数据注释。
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString="{0:dd/MMM/yyyy}")]
public DateTime NextExecutionCalcd { get; set; }
答案 2 :(得分:1)
我遇到了同样的问题。我不知道这是不是最好的解决方案,但我用这样的正则表达式切断了时间属性:
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指令using System.Text.RegularExpressions;
答案 3 :(得分:1)
我需要将电话转移到&#34; .Date&#34;超过最后一个paren,所以不是这样:
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;