![](/img/trans.png)
[英]how to convert MM/dd/YYYY hh:mm:ss AM to YYYY-MM-dd datetime format by linq?
[英]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.