2010-10-22 27 views
1

J'ai besoin d'un TimeSpan qui prend en compte les heures de travail. Disons que si nous configurons le TimeSpan avec un jour de 8 heures, deux jours devraient renvoyer 16 heures au total au lieu de 48. Quelqu'un connaît-il une telle classe?TimeSpan qui reconnaît les heures de travail en C#

Merci.

Modifier

J'ai besoin les mêmes fonctionnalités que timespan mais avec une durée de jour configurable. Ajouter, soustraire, ..., devrait fonctionner en tenant compte de cela. J'ai essayé de prolonger TimeSpan, mais c'est scellé. Peut-être que je devrais opter pour des méthodes d'extension pour implémenter cela comme Oded suggéré (ou quelque chose de similaire).

+0

Très probablement pas utile car vous avez demandé spécifiquement pour C#, mais juste au cas où: Excel prend en charge vos besoins. –

+0

Connexes: http://stackoverflow.com/questions/3492958/how-can-a-timespan-day-last-only-for-8-hours –

Répondre

2

Si vous voulez simplement comprendre chaque jour 8 heures, vous pouvez le faire:

return TimeSpan.TotalHours/3; 

Mise à jour:

Maintenant que vous avez fourni un peu plus en détail, je suggère emballage timespan avec votre propre type - vous pouvez avoir une propriété HoursInWorkingDay qui vous permettra de configurer le nombre d'heures dans une journée de travail.

avoir un constructeur qui prend un timespan et l'assigner à un timespan privé que vous pouvez utiliser pour les calculs:

public class WrappedTimeSpan 
{ 
    private TimeSpan ts; 
    private int hoursInDay = 8; 

    public WrappedTimeSpan(TimeSpan origTS) 
    { 
     ts = origTs; 
    } 

    public WrappedTimeSpan(TimeSpan origTS, int hoursInDay) : this(origTs) 
    { 
     hoursInDay = hoursInDay; 
    } 

    public int HoursInDay { get;} 

    public int WorkingHours { get { return ts.TotalHours/hoursInDay; }} 
} 

Cela peut être étendu pour répondre à toutes les autres exigences que vous avez.

+0

très court, facile et agréable +1 –

+0

Je cherchais plus solution complète ... –

+3

Avez-vous pris en compte des exemples tels que span entre lundi 16h30 et mardi 9h30 (devrait céder 1 heure), vendredi 9h et lundi 9h (8hrs), les différences culturelles dans le monde musulman (où vendredi est le jour de la semaine au lieu du dimanche), les différences d'affaires (tous les travaux ne commencent pas à 9h et/ou ne se terminent pas à 17h), et des informations supplémentaires telles que les heures supplémentaires et les vacances? – Dialecticus