2012-07-24 101 views
2

可以DateTime值爲NULL可以爲空的日期時間值

我有這樣的代碼:

在這裏,我繼承了我的變量

namespace Transakcija 
{ 
    public class Line 
    { 
     public System.DateTime DateOfProduction { get; set; } 
    } 
} 

然後每個循環:

foreach (var rw_det in dt_stavke.Rows) 
{ 
    var list = new List<Transakcija.Line>(); 
    var l = new Transakcija.Line(); 

    //DateOfProduction 
    if (rw_det["DPRO02"].ToString().Length <= 0) 
    { 
     l.DateOfProduction = default(DateTime); 
    } 
    else 
    { 
     l.DateOfProduction = new DateTime(); 
     prod_date = rw_det["DPRO02"].ToString(); 
     DateTime pro_date = DateTime.ParseExact(prod_date, "dd.MM.yyyy", CultureInfo.InvariantCulture); 
     string p_date = pro_date.ToString("yyyy-MM-dd"); 
     l.DateOfProduction = DateTime.Parse(p_date); 
    } 
} 

所以l.DateOfProduction需要爲空值。我曾經嘗試這樣做:

DateTime? dt = null; 
l.DateOfProduction = (DateTime)dt; 

但我得到的錯誤:nullable object must have a value

因此,這是可能的,或者我必須通過最小datetime值的變量?

+0

你'else'分支看起來怪怪的。構造函數new DateTime()'似乎並不存在,整條線似乎是不必要的。爲什麼要將字符串解析爲日期,然後將其格式化爲另一個字符串,然後再解析它? – millimoose 2012-07-24 13:50:12

回答

4

您可以通過使用constructor assigne一個可空DateTime

DateTime? dt = new Nullable<DateTime>(); 

您可以檢查是否可空類型是null使用在HasValue屬性:

if(dt.HasValue) 
{ 
    // now you can safely use dt.Value as DateTime, 
    // otherwise accessing the Value property raises an InvalidOperationException 
    DateTime otherDate = dt.Value; 
} 
+0

好吧,但我可以這樣做:l.DateOfProduction = otherDate; – CrBruno 2012-07-24 13:54:55

+0

@CrBruno:是的,'dt.Value'只是一個DateTime。所以你可以使用'l.DateOfProduction = dt.Value;'當你首先檢查'dt.HasValue'。但是,如果可能的話,我建議將'DateOfProduction'的數據類型更改爲'DateTime?'。 – 2012-07-24 13:58:05

8

DateTime是一個數值類型,所以不可以,它永遠不會是null。如果你需要一個「沒有價值」的價值,使用Nullable<DateTime>或短DateTime?

+0

所以我必須通過最低價值你說? – CrBruno 2012-07-24 13:44:06

+0

@CrBruno這不是他所說的。 – Servy 2012-07-24 13:44:43

+0

如何寫?幫助傢伙! – CrBruno 2012-07-24 13:45:54

1

YOE可以Dateime可空這樣

DateTime? dtNullable = new Nullable<DateTime>(); 

if(dtNullable.HasValue) 
l.DateOfProduction = dtNullable.Value; 

PS:例如,如果你傳遞一個非null的日期時間爲可空的DateTime那麼它將需要鑄造

,與第二樣本在這個

DateTime? nullableDateTime = (DateTime?)nonNullableDateTime; 
+0

對於這個我得到錯誤:可爲空的對象必須有一個值。 – CrBruno 2012-07-24 13:51:48

+0

我已經更新了答案,將檢查它是否有價值,然後再使用可空值 – HatSoft 2012-07-24 13:54:06

+0

我寫了這個,並且我得到了最短日期? – CrBruno 2012-07-24 13:56:51

相關問題