2017-06-05 49 views
0

我有DateTime類擴展方法:C#日期部分

public static DateTime? SafeConvertToDateTime(this string value, bool dateOnly) 
{ 
    DateTime parsedDateTime; 
    if (DateTime.TryParse(value, out parsedDateTime)) 
    { 
     return DateTime.SpecifyKind(parsedDateTime, DateTimeKind.Utc); 
    } else { 
     return new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
    } 
} 

如果「dateOnly =真正的」我應該只用日期屬性對客戶端返回日期時間和所有轉換後(本地或UTC )應該被跳過,如果有DateTime只有日期。 但我怎麼知道這個日期時間只包含日期(因爲時間可以有效爲0)? 我可以添加擴展屬性(dateOnly),但據我所知,我不能在C#中添加擴展屬性,只有方法? 我可以使用Datetime的一些現有屬性來告訴,只有日期應該在代碼中考慮嗎?

+0

爲什麼不只是使用DateTime.Date是你以後的代碼?如果代碼不應該依賴於時間部分,那麼確保它只引用日期部分。 – Neil

+0

這不是DateTime類的擴展方法,這是字符串類的擴展。 – Paddy

+2

如果你'返回DateTime.Date;',那麼只有日期部分將被返回,時間部分將會是= 0 – pitersmx

回答

0

但是我怎麼知道這個DateTime只有日期(因爲時間可以 有效爲0)?

使用現有的DateTime類無法實現此功能 - 因爲您無法區分'date'和'恰好在午夜的datetime'。他們看起來完全一樣。

The Date type可能是有趣的 - 但給定日期時間和日期是不同的類型,你需要改變你的代碼來處理這兩種類型。 Noda's LocalDate也可能是感興趣的。

如果你決定使用日期類型,你可以創建一個包含要麼日期或日期時間的包裝類,並根據需要通過周圍的:

public class DateWithOrWithoutTime 
{ 
    public Date? DateWithoutTime { get; private set; } 
    public DateTime? DateWithTime { get; private set; } 

    public DateWithOrWithoutTime(Date dateToSet) 
    { 
     DateWithoutTime = dateToSet; 
    } 
    public DateWithOrWithoutTime(DateTime dateTimeToSet) 
    { 
     DateWithTime = dateTimeToSet; 
    } 

    public bool IsDate() 
    { 
     return DateWithoutTime != null; 
    } 

    public bool IsDateTime() 
    { 
     return DateWithTime != null; 
    } 
} 
+0

@Simon這是否做你所期望的?還是有你需要的不同功能? – mjwills

0

this question如何檢查如果日期時間字符串包含時間。您需要使用TimeOfDay屬性。

+1

如果您發現另一篇文章回答當前問題,請使用重複標誌或投票結束重複。如果不確定發表評論。請勿將鏈接發佈到其他問題作爲答案。 – ASh