我从数据库中查询了一些字段,计划开始日期是日期时间类型,计划开始日期可以为空,我想将计划开始日期格式化为“yyyy-MM-dd”
DataTable dt = ds.Tables[0];
var query = dt.AsEnumerable()
.Select(dr =>
new InitOverview
{
IID = string.IsNullOrEmpty(dr.Field<string>("IID").ToString()) ? "" : dr.Field<string>("IID"),
ProjectName = string.IsNullOrEmpty(dr.Field<string>("ProjectName")) ? "" : dr.Field<string>("ProjectName"),
TeamLead = string.IsNullOrEmpty(dr.Field<string>("TeamLead")) ? "" : dr.Field<string>("TeamLead"),
Status = string.IsNullOrEmpty(dr.Field<string>("Status")) ? "" : dr.Field<string>("Status"),
OverallStatus = string.IsNullOrEmpty(dr.Field<string>("OverallStatus")) ? "" : dr.Field<string>("OverallStatus"),
Planstartdate = dr.Field<DateTime?>("Planstartdate"),
Planenddate = dr.Field<DateTime?>("Planenddate"),
Actualstartdate = dr.Field<DateTime?>("Actualstartdate"),
Actualenddate = dr.Field<DateTime?>("Actualenddate")
}
).ToList();
谁能帮忙实现一下? 谢谢
最佳答案
假设您有一个可以为 null 的 DateTime 存储在一个变量中,您需要检查它是否为 null。然后您可以访问基础值并将其转换为字符串。 Nullable types提供一个 bool 属性 HasValue
,您应该在尝试使用底层对象之前检查它。
using System;
public class Program
{
public static void Main()
{
DateTime? actualStartDate = DateTime.Now;
if(actualStartDate.HasValue)
{
string s = actualStartDate.Value.ToString("yyyy-MM-dd");
Console.WriteLine("value: " + s);
}
}
}
fiddle here .
如果你想在你的对象初始值设定项中执行此操作,它看起来像这样,使用 ternary operator :
new InitOverview
{
Planstartdate = dr.Field<DateTime?>("Planstartdate").HasValue
? dr.Field<DateTime?>("Planstartdate").Value.ToString("yyyy-MM-dd") : "no date";
}
fiddle here .
但是,我要提醒您,此时将其转换为字符串可能不是一个好主意。在代码中,您通常应该将日期保留为实际需要显示给用户的日期,这样您就可以尽可能地延迟它。只有在您的应用程序的 View 层中,您才应该真正将日期转换为字符串。这使 API 更简洁(无需再次将其转换为日期来操作它)并确保根据用户的文化设置轻松转换为正确的格式以显示给用户。
此外,您还在进行无聊的数据库记录与 .NET 对象的连接。这很乏味而且浪费时间。您应该使用微型 ORM,例如 Dapper并使它更清洁。可能是:
using (var connection = new SqlConnection(connectionString))
{
return connection.Query<InitOverview>(selectStatement).AsList();
}
关于c# - 如何格式化日期时间?输入 "yyyy-MM-dd",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46209705/