c# - 如何格式化日期时间?输入 "yyyy-MM-dd"

标签 c#

我从数据库中查询了一些字段,计划开始日期是日期时间类型,计划开始日期可以为空,我想将计划开始日期格式化为“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/

相关文章:

c# - 从逗号分隔字符串中的键值对中获取值

c# - 为什么在使用 Rhino Mocks stub 函数时需要 Replay()?

c# - WCF、SOAP、EF、POCO

c# - 由于不同模式中的对象名称相同,T4 模板中的亚音速转换失败

c# - 对 SSPI 的调用失败,请参阅内部异常 paho m2mqtt Dot.Net(c#) 客户端 SSL/TLS 连接

c# - 无效的 Json 原语

c# - 递归到尾递归

c# - 如何在 asp.net webform 中获取 js POST?

c# - Dataset Designer.cs 在 VS2013 中从 SVN 获取更新后生成 Designer1.cs

c# - WPF 文本框 : set cursor position to last character received on property changed handler in View Model