计算一个月内的周数,包括部分周数

时间:2015-03-13 13:46:26

标签: c# ios datetime xamarin.ios xamarin

首先,我搜索了rangeOfUnit:inUnit:forDate:的Xamarin.iOS等价物,但似乎没有。我想翻译这段代码

NSRange rangeOfWeeks = [self.calendar rangeOfUnit:NSWeekCalendarUnit inUnit:NSMonthCalendarUnit forDate:firstOfMonth];

但Xamarin.iOS中没有rangeOfUnit:inUnit:forDate。有像this

这样的实现
public static int Weeks(int year, int month)
{
    DayOfWeek wkstart = DayOfWeek.Monday;

    DateTime first = new DateTime(year, month, 1);
    int firstwkday = (int)first.DayOfWeek;
    int otherwkday = (int)wkstart;

    int offset = ((otherwkday + 7) - firstwkday) % 7;

    double weeks = (double)(DateTime.DaysInMonth(year, month) - offset) / 7d;

    return (int)Math.Ceiling(weeks);
} 

,但这里不计算部分周数。我也认为你失去了本地化的一部分(没有NSCalendar,......),但这是另一个故事。

如何计算一个月内的周数?如果月份在一周中开始,则应计为整周。如果月份在一周中结束,它也应该算作整周。

1 个答案:

答案 0 :(得分:3)

看起来你是在周数之后。如果是这种情况,下面的代码就可以得到它。

        nint era, year, weekOfYear, weekday;
        NSCalendar.CurrentCalendar.GetComponentsFromDateForWeekOfYear(out era, out year, out weekOfYear, out weekday, NSDate.Now);

        System.Diagnostics.Debug.WriteLine(weekOfYear);

        var weekOfMonth = NSCalendar.CurrentCalendar.GetComponentFromDate(NSCalendarUnit.WeekOfMonth, NSDate.Now);

        System.Diagnostics.Debug.WriteLine(weekOfMonth);

今天的一周是#11,这是本月的第二周。