Lavorare a settimane - Extension Methods

Ne avevo già parlato anni fa, e il problema si ripresenta spesso per cui mi sono detto, perché non creare degli Extension Methods che mi facciano tutto il lavoro sporco?

Sperando di fare cosa gradita ve l’allego Occhiolino

    public static class ExtensionMethods
    {
        public static int WeekNumber(this DateTime date)
        {
            var year = date.Year;
            DateTime week1;

            if (date >= new DateTime(year, 12, 29))
            {
                week1 = GetWeekOneDate(year + 1);
                if (date < week1)
                {
                    week1 = GetWeekOneDate(year);
                }
            }
            else
            {
                week1 = GetWeekOneDate(year);
                if (date < week1)
                {
                    week1 = GetWeekOneDate(System.Threading.Interlocked.Decrement(ref year));
                }
            }

            return Convert.ToInt32(Math.Truncate((decimal) (date - week1).Days/7 + 1));
        }

        private static DateTime GetWeekOneDate(int year)
        {
            // Get the date for Jan-4 for the given year
            var date = new DateTime(year, 1, 4);

            // Get the ISO-8601 day number for this date 1==Monday, 7==Sunday
            var dayNum = (int) date.DayOfWeek;
            // 0==Sunday, 6==Saturday
            if (dayNum == 0)
                dayNum = 7;

            // Return the date of the Monday that is less than or equal to this date
            return date.AddDays(1 - dayNum);

        }

        public static DateTime WeekStartingDay(this DateTime date)
        {

            var dayNum = (int)date.DayOfWeek;
            if (dayNum == 0)
                dayNum = 7;

            return date.AddDays(1 - dayNum).Date;

        }

        public static string WeekString(this DateTime date)
        {
            return date.Year.ToString() + "/" + WeekOfYear(date).ToString("00");
        }
    }

Piccoli programmatori crescono A bocca aperta

Tag di Technorati: ,

posted @ Tuesday, March 12, 2013 2:57 PM

Print
Comments have been closed on this topic.
«December»
SunMonTueWedThuFriSat
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234