2017-06-05 17 views
0

私は、DateTimeクラスに拡張メソッドを持っている:「dateOnly = trueを」私は、ローカルまたはUTCに(クライアント上のすべての変換後にのみ日付プロパティで日時を返すべきであり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); 
    } 
} 

場合日付のみのDateTimeがある場合はスキップする必要があります。 しかし、このDateTimeはDateのみを保持していることをどのように知ることができますか(時間は0として有効なので)。 拡張プロパティ(dateOnly)を追加できましたが、知っているとおり、C#で拡張プロパティを追加することはできません。 Datetimeの既存のプロパティを使用して、後でコードで考慮する必要がある日付のみがあることを伝えることはできますか?

+0

DateTime.Dateを使用しないのはなぜですか?コードが時間部分に依存してはならない場合は、日付部分のみを参照するようにしてください。 – Neil

+0

これは、DateTimeクラスの拡張メソッドではありません。これは、文字列クラスの拡張です。 – Paddy

+2

'DateTime.Date;'を返すと、Date部分だけが返され、時刻部分は0になります。 – pitersmx

答えて

0

しかし、このDateTimeには日付のみが含まれていることがわかります( は0として有効なので)。

既存のDateTimeクラスを使用してこれを達成する方法はありません。「日付」と「真夜中になる日時」を区別できないためです。彼らはまったく同じように見えます。

The Date typeがありますが、DateTimeとDateが異なる場合は、両方の型を処理するコードを変更する必要があります。 Noda's LocalDateもまた興味深いかもしれない。

あなたはDate型を使用する場合は、日付または日時のいずれかが含まれているラッパークラスを作成することができ、必要に応じてそれを周りに渡す:

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を参照してください。 datetime文字列に時間が含まれている場合。 TimeOfDayプロパティを使用する必要があります。

+1

現在の質問に回答する別の投稿を見つけた場合は、重複フラグを使用するか、投票して重複として閉じます。不明な場合はコメントを投稿してください。答えとして別の質問へのリンクを投稿しないでください。 – ASh

関連する問題