为了账号安全,请及时绑定邮箱和手机立即绑定

在.NET中计算每月的第几周

在.NET中计算每月的第几周

ITMISS 2019-11-02 09:46:24
.NET库是否有一种简单的方法来返回给定日期的星期数?例如,输入Year = 2010, Month = 1, Day = 25,应输出5星期数。我找到的最接近的是Calendar.GetWeekOfYear,几乎就在那里。Java具有日期字符串格式“ W”,该字符串每月返回一周,但在.NET中看不到任何等效的形式。
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

没有内置的方法可以执行此操作,但是这里有一个扩展方法可以为您完成这项工作:


static class DateTimeExtensions {

    static GregorianCalendar _gc = new GregorianCalendar();

    public static int GetWeekOfMonth(this DateTime time) {

        DateTime first = new DateTime(time.Year, time.Month, 1);

        return time.GetWeekOfYear() - first.GetWeekOfYear() + 1;

    }


    static int GetWeekOfYear(this DateTime time) {

        return _gc.GetWeekOfYear(time, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);

    }

}

用法:


DateTime time = new DateTime(2010, 1, 25);

Console.WriteLine(time.GetWeekOfMonth());

输出:


5

您可以GetWeekOfYear根据需要进行更改。


查看完整回答
反对 回复 2019-11-02
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

没有直接内置的方法可以做到这一点,但是可以很容易地做到。这是一种扩展方法,可用于轻松获取日期的基于年份的星期数:


public static int GetWeekNumber(this DateTime date)

{

    return GetWeekNumber(date, CultureInfo.CurrentCulture);

}


public static int GetWeekNumber(this DateTime date, CultureInfo culture)

{

    return culture.Calendar.GetWeekOfYear(date,

        culture.DateTimeFormat.CalendarWeekRule,

        culture.DateTimeFormat.FirstDayOfWeek);

}

然后,我们可以使用它来计算基于月份的星期数,就像Jason所示。文化友好版本可能如下所示:


public static int GetWeekNumberOfMonth(this DateTime date)

{

    return GetWeekNumberOfMonth(date, CultureInfo.CurrentCulture);

}


public static int GetWeekNumberOfMonth(this DateTime date, CultureInfo culture)

{

    return date.GetWeekNumber(culture)

         - new DateTime(date.Year, date.Month, 1).GetWeekNumber(culture)

         + 1; // Or skip +1 if you want the first week to be 0.

}


查看完整回答
反对 回复 2019-11-02
  • 3 回答
  • 0 关注
  • 748 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信