2009-02-12 9 views
0

Je dois tester qu'un DateTime est au début d'une unité de temps pour différentes unités. C'est le code que j'utilise en ce moment:Quelle est la meilleure façon de tester qu'un C# DateTime est une minute, heure, mois, etc

/// ignoring milliseconds all the way down 

bool IsMinute(DateTime dt) 
{ 
    return dt.Second == 0; 
} 

bool IsHour(DateTime dt) 
{ 
    return dt.Second == 0 && dt.Minute == 0; 
} 

bool IsDay(DateTime dt) 
{ 
    return dt.Date == dt; 
} 

bool IsMonth(DateTime dt) 
{ 
    return dt.Date == dt && dt.Day == 1; 
} 

bool IsYear(DateTime dt) 
{ 
    return dt.Date == dt && dt.DayOfYear == 1; 
} 

Des idées d'améliorations?

+0

à envisager de les renommer « IsStartOfXXX "ou" IsWholeXXX ". –

Répondre

7

:

Vous pouvez enchaîner ces ensemble - par exemple, votre IsMinute devrait probablement vérifier millisecondes (EDIT IsMonth est très bien, car il vérifie d'abord qu'il est juste une date.). Plutôt que d'ajouter également ce test à IsHour, vérifiez d'abord IsHour en premier. Chaining est simple:

bool IsHour(DateTime dt) 
{ 
    return IsMinute(dt) && dt.Minute == 0; 
} 

Une autre alternative pourrait être de les rendre les méthodes d'extension:

public static bool IsHour(this DateTime dt) 
{ 
    return dt.IsMinute() && dt.Minute == 0; 
} 

Je certainement les rendre statique de toute façon :)

+0

Si l'un d'eux réutilisait plus d'une seule clause, le chaînage serait vraiment bon. Est-ce que c'est ... Je ne suis pas sûr de ce que cela va lui apporter. – BCS

+0

@BCS: Toutes mes excuses, IsMonth va bien. Éditera la réponse. –

Questions connexes