ASP.NET C# – Funzioni DateTime per aggiungere, sottrarre e calcolare i giorni lavorativi Una serie di metodi helper che consentono di aggiungere, sottrarre o ottenere i giorni lavorativi da uno o più oggetti DateTime, escludendo i giorni festivi e/o eventuali festività nazionali, internazionali, calcolate (es. Pasqua) o personalizzabili.

Classe ASP.NET C# per il controllo e il calcolo formale del Codice Fiscale

L’articolo di oggi nasce da un’esigenza particolare che ho avuto oggi in ufficio, legata a una serie di operazioni particolari da effettuare con le date: in particolare, avevo la necessità di confrontare un oggetto DateTime ricavato da una data inserita da un utente con data odierna, dopo aver incrementato quest’ultima di due giorni lavorativi.

Inizialmente ho pensato che, per risolvere il problema, sarebbe stato sufficiente escludere i sabati e le domeniche: tuttavia, mi sono ben presto reso conto di aver sottovalutato il problema, in quanto una simile soluzione non prende in considerazione una serie di festività nazionali, internazionali e addirittura cittadine (ad es. le feste dei patroni di Roma, Milano etc.). In buona sostanza, oltre a tutti i sabati e le domeniche dovevo gestire anche:

  • Le festività internazionali (o perlomeno quelle valide in occidente, come ad es. natale e capodanno).
  • Le festività calcolate (Pasqua e Pasquetta).
  • Le festività nazionali (come ad esempio il 25 aprile in Italia o il 4 luglio negli Stati Uniti d’America).
  • Le festività cittadine (come S. Pietro e Paolo a Roma, che cade il 29 giugno, o S. Ambrogio a Milano, che cade il 7 dicembre).
  • Qualsiasi altra festività o altro giorno non lavorativo personalizzato (ad es. i giorni di chiusura aziendale).

Tutti questi ragionamenti mi hanno portato a sviluppare una serie di metodi helper che, pur se non eccezionalmente eleganti, consentono di gestire in modo efficace tutte queste casistiche. Ho deciso di pubblicare il codice sorgente relativo all’attività all’interno di questo articolo, nella speranza che possano tornare utili anche  a qualche altro sviluppatore.

Codice Sorgente

Come si può vedere, i metodi principali (AddBusinessDays, SubtractBusinessDays and GetBusinessDays) possono essere usati come normali metodi helper statici o come extension method.

Esempi di utilizzo

Il codice sorgente dovrebbe essere abbastanza chiaro: ad ogni buon conto, ecco una serie di esempi che spiegano come è possibile utilizzarlo.

Aggiungere 10 giorni lavorativi (saltando solo i sabati e le domeniche)

Aggiungere 10 giorni lavorativi (saltando i sabati, le domeniche e le feste internazionali previste per il 2019)

Aggiungere 10 giorni lavorativi (saltando i sabati, le domeniche e le feste internazionali e nazionali italiane previste per il 2019)

Aggiungere 10 giorni lavorativi (saltando i sabati, le domeniche, le feste internazionali, nazionali italiane e della città di Roma previste per il 2019)

Conclusione

Per il momento è tutto: qualora queste classi vi siano utili, o se avete bisogno di ulteriori informazioni, sentitevi liberi di aggiungere il vostro commento in fondo a questo articolo. Alla prossima, e… felice sviluppo!

 

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

6 Comments on “ASP.NET C# – Funzioni DateTime per aggiungere, sottrarre e calcolare i giorni lavorativi Una serie di metodi helper che consentono di aggiungere, sottrarre o ottenere i giorni lavorativi da uno o più oggetti DateTime, escludendo i giorni festivi e/o eventuali festività nazionali, internazionali, calcolate (es. Pasqua) o personalizzabili.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.