繁体   English   中英

如何格式化日期时间? 输入“yyyy-MM-dd”

[英]How to format Datetime? type to “yyyy-MM-dd”

我从数据库查询一些字段,Planstartdate是datetime类型,Planstartdate可以为null,我想将Planstartdate格式化为“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();

任何人都可以帮助实现它? 谢谢

假设您在变量中存储了可以为空的DateTime,则需要检查它是否为null。 然后,您可以访问基础值并将其转换为字符串。 Nullable类型提供了一个布尔属性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);
        }       
    }
}

在这里小提琴

如果你想在你的对象初始化器中这样做,它会看起来像这样,使用三元运算符

new InitOverview
{
    Planstartdate = dr.Field<DateTime?>("Planstartdate").HasValue
        ? dr.Field<DateTime?>("Planstartdate").Value.ToString("yyyy-MM-dd") : "no date";
}

在这里小提琴

但是,我会提醒您,此时将其转换为字符串可能不是一个好主意。 在代码中,您通常应将日期保留为日期,直到实际需要向用户显示,因此您应尽可能延迟。 只有在应用程序的视图层中,您才能将日期实际转换为字符串。 这使API更加清洁(无需再次将其转换为日期来操作它)并确保根据文化设置将其转换为正确的格式以便显示给用户。

此外,您正在无聊地将数据库记录连接到.NET对象。 这很乏味,浪费时间。 你应该使用微型ORM,如Dapper ,使其更清洁。 它可能是:

using (var connection = new SqlConnection(connectionString))
{
    return connection.Query<InitOverview>(selectStatement).AsList();
}

虽然@mason的答案肯定有效,但我想补充一点,因为您使用的是DataTable,可能会出现这样的情况:您从数据库中获取日期(并将其转换为数据表以在Excel中打印,反之亦然),在这种情况下如果数据库包含DBNull.Value则HasValue可能不起作用。 因此,您还应该检查您提取的数据是否具有DBNull.Value

new InitOverview
{
    Planstartdate = dr["PlantStartDate"]!=DBNull.Value ? "Check Null condition mentioned in previous answer" : "no date";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM