簡體   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