Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace ConsoleApplication1
- {
- class Program
- {
- static void Main(string[] args)
- {
- for (int i = 13; i <= 31; i++)
- {
- DateTime start = new DateTime(2014, 10, i);
- DateTime stop = new DateTime(2014, 10, 31);
- int totalWorkingDays = GetNumberOfWorkingDays(start, stop);
- Console.WriteLine("There are {1} working days from Oct {0}, 2014 to Oct 31, 2014.", i, totalWorkingDays);
- }
- }
- private static int GetNumberOfWorkingDays(DateTime start, DateTime stop)
- {
- TimeSpan interval = stop - start;
- int totalWeek = interval.Days / 7;
- int totalWorkingDays = 5 * totalWeek;
- int remainingDays = interval.Days % 7;
- for (int i = 0; i <= remainingDays; i++)
- {
- DayOfWeek test = (DayOfWeek)(((int)start.DayOfWeek + i) % 7);
- if (test >= DayOfWeek.Monday && test <= DayOfWeek.Friday)
- totalWorkingDays++;
- }
- return totalWorkingDays;
- }
- }
- }
- private static int GetNumberOfWorkingDaysJeroen(DateTime start, DateTime stop)
- {
- int days = 0;
- while(start <= stop)
- {
- if(start.DayOfWeek != DayOfWeek.Saturday && start.DayOfWeek != DayOfWeek.Sunday)
- {
- ++days;
- }
- start = start.AddDays(1);
- }
- return days;
- }
- private static int GetNumberOfWorkingDays(DateTime start, DateTime stop)
- {
- var days = (stop - start).Days + 1;
- return workDaysInFullWeeks(days) + workDaysInPartialWeek(start.DayOfWeek, days);
- }
- private static int workDaysInFullWeeks(int totalDays)
- {
- return (totalDays / 7) * 5;
- }
- private static int workDaysInPartialWeek(DayOfWeek firstDay, int totalDays)
- {
- var remainingDays = totalDays % 7;
- var daysToSaturday = (int) DayOfWeek.Saturday - (int) firstDay;
- if(remainingDays <= daysToSaturday)
- return remainingDays;
- /* daysToSaturday are the days before the weekend,
- * the rest of the expression computes the days remaining after we
- * ignore Saturday and Sunday
- */
- // Range ends in a Saturday or in a Sunday
- if (remainingDays <= daysToSaturday + 2)
- return daysToSaturday;
- // Range ends after a Sunday
- else
- return remainingDays - 2;
- }
- namespace Extensions{
- using System;
- public static class DateTimeExtensions {
- public static int GetNumberOfWeekDays(this DateTime dateTime, DateTime end_date_time){
- int days = 0;
- while(dateTime <= end_date_time) {
- if(dateTime.DayOfWeek != DayOfWeek.Saturday && // IF not sat
- dateTime.DayOfWeek != DayOfWeek.Sunday) // And not sunday
- ++days;
- dateTime = dateTime.AddDays(1);
- }
- return days;
- }
- public static DateTime AddWeekDays(this DateTime dateTime, int days) =>
- dateTime.AddDays(dateTime.GetNumberOfWeekDays(dateTime.AddDays(days)));
- }
- }
- namespace ConsoleApplication1 {
- using System;
- using static Extensions.DateTimeExtensions;
- class Program {
- static void Main(string[] args) {
- DateTime date = DateTime.Now;
- // Example usage of Get Number of weekdays
- int weekDays = date.GetNumberOfWeekDays(dateTime.AddDays(10))
- // Example usage of Add Week Days
- DateTime endDate = date.AddWeekDays(4);
- }
- }
- }
- public int GetWorkingDays(DateTime from, DateTime to)
- {
- var totalDays = 0;
- for (var date = from; date < to; date = date.AddDays(1))
- {
- if (date.DayOfWeek != DayOfWeek.Saturday
- && date.DayOfWeek != DayOfWeek.Sunday)
- totalDays++;
- }
- return totalDays;
- }
Add Comment
Please, Sign In to add comment