Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中获取GetWeekOfYear的日期?_C#_.net_Datetime_.net 4.0_Cultureinfo - Fatal编程技术网

在c#中获取GetWeekOfYear的日期?

在c#中获取GetWeekOfYear的日期?,c#,.net,datetime,.net-4.0,cultureinfo,C#,.net,Datetime,.net 4.0,Cultureinfo,我有一个函数,它给我(对于当前日期)-它的周数: 因此:DateTime(2009,1,1) 回答:1 和:DateTime(2009,1,4) 回答:2 现在,我需要一个函数,它为我提供此值的startDate&&endDate: so for week #1 -> 1/1/2009 ---> 1/3/2009 so for week #2 -> 1/4/2009 ---> 1/10/2009 因此:我有一个函数,它给我指定日期的星期数。 但本周的时间跨度为

我有一个函数,它给我(对于当前日期)-它的周数:

因此:
DateTime(2009,1,1)

回答:
1

和:
DateTime(2009,1,4)

回答:
2

现在,我需要一个函数,它为我提供此值的startDate&&endDate:

so for week #1 -> 1/1/2009   ---> 1/3/2009
so for week #2 -> 1/4/2009   ---> 1/10/2009
因此:我有一个函数,它给我指定日期的星期数。 但本周的时间跨度为
x--->y

我需要那些x和y

谢谢


p、 我一直在寻找这样的函数,但没有找到:-(

我曾经使用过本文评论中描述的一种方法

使用系统;
利用制度全球化;
公共静态类FirstDayOfWeekUtility
{
/// 
///返回指定日期所在周的第一天
///日期在使用当前区域性中。
/// 
公共静态DateTime GetFirstDayOfWeek(DateTime dayInWeek)
{
CultureInfo defaultCultureInfo=CultureInfo.CurrentCulture;
返回GetFirstDateOfWeek(dayInWeek,defaultCultureInfo);
}
/// 
///返回指定日期所在周的第一天
///他在。
/// 
公共静态DateTime GetFirstDayOfWeek(DateTime dayInWeek,CultureInfo CultureInfo)
{
DayOfWeek firstDay=cultureInfo.DateTimeFormat.FirstDayOfWeek;
DateTime firstDayInWeek=dayInWeek.Date;
while(firstDayInWeek.DayOfWeek!=第一天)
firstDayInWeek=firstDayInWeek.AddDays(-1);
每周第一天返回;
}
}

按日期获取一周中的第一天:

static DateTime GetFirstDayOfWeek(DateTime date)
{
    var firstDayOfWeek = date.AddDays(-((date.DayOfWeek - DayOfWeek.Sunday + 7) % 7));
    if (firstDayOfWeek.Year != date.Year)
        firstDayOfWeek = new DateTime(date.Year, 1, 1);
    return firstDayOfWeek;
}
一周的最后一天也是这样:

static DateTime GetLastDayOfWeek(DateTime date)
{
    var lastDayOfWeek = date.AddDays((DayOfWeek.Saturday - date.DayOfWeek + 7) % 7);
    if (lastDayOfWeek.Year != date.Year)
        lastDayOfWeek = new DateTime(date.Year, 12, 31);
    return lastDayOfWeek;
}
罗伊的补充(最终): 扩展方法,该方法提供从单个日期开始的所有详细信息(周详细信息): p、 美国每周第一天=星期日

   public class DateTimeSpan
    {
        public DateTime WeekStartDate;
        public DateTime WeekEndDate;
        public DateTime MonthStartDate;
        public DateTime MonthEndDate;
        public DateTime YearStartDate;
        public DateTime YearEndDate;
        public int WeekNum;

    }

    public static DateTimeSpan TimeProperties(this DateTime str)
    {
        if (str == null) return null;
        DateTimeSpan dts = new DateTimeSpan();
        dts.WeekNum=     CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(str, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
        dts.WeekStartDate = GetFirstDayOfWeek(str);
        dts.WeekEndDate = GetLAstDayOfWeek(str);
        dts.MonthStartDate = new DateTime(str.Year, str.Month, 1);
        int numberOfDays = DateTime.DaysInMonth(str.Year, str.Month);
        DateTime last = new DateTime(str.Year, str.Month, numberOfDays);
        dts.MonthEndDate = last;
        dts.YearStartDate = new DateTime(str.Year, 1, 1);
        numberOfDays = DateTime.DaysInMonth(str.Year, 12);
        last = new DateTime(str.Year, 12, numberOfDays);
        dts.YearEndDate = last;

        return dts;
    }


    static DateTime GetFirstDayOfWeek(DateTime date)
    {
        var firstDayOfWeek = date.AddDays(-((date.DayOfWeek - DayOfWeek.Sunday + 7) % 7));
        if (firstDayOfWeek.Year != date.Year)
            firstDayOfWeek = new DateTime(date.Year, 1, 1);
        return firstDayOfWeek;
    }

    static DateTime GetLAstDayOfWeek(DateTime date)
    {
        var firstDayOfWeek = date.AddDays(((DayOfWeek.Saturday - date.DayOfWeek + 7) % 7));
        if (firstDayOfWeek.Year != date.Year)
            firstDayOfWeek = new DateTime(date.Year, 12, 31);
        return firstDayOfWeek;
    }

你想知道某个星期的日期吗?@NikhilAgrawal是的。根据我的例子,第一周从1到3……我看不出有什么问题。你能不能把日期追溯到上一个星期天/下一个星期六,并为那一天在不同的年份添加一个特殊的例外?(没有投票。)@RoyiNamir也许我误解了,我以为你是从一个日期开始的。“1月5日的一周从1月4日到1月10日”,在那里你可以通过查找1月5日之前或当天的最后一个星期日得到“1月4日”,在那里你可以得到“1月10日”通过查找1月5日当天或之后的第一个星期六。@hvd.net函数GetWeekOfYear是正确的。现在我需要根据此函数结果计算日期。+1比我更快找到答案。我在我的应用程序中使用了与我在答案中粘贴的相同的链接代码。
GetFirstDayOfWeek(新日期时间(2009,1,1),新文化信息(“en-US”)。Dump();
给我一个2008年12月28日00:00:00…它错了为什么它错了?一周的第一天从某个日期开始,几周可以跨越几年。对于这种情况,你需要执行一个例外情况;检查计算的日期是否在同一年。如果不是,则获取该年的第一个日期。@FrederikGheysels你读过我的问题?我需要这个:2009年的第1周从1/1开始到1/3结束……第2周从1/4开始到1/10结束……
GetFirstDayOfWeek(新的日期时间(2009,1,1),新的文化信息(“en-US”)。Dump();
给我2008年12月28日00:00:00…这是错误的幸运的是你已经删除了
GetDayInWeek
。我想我弄错了:如果输入有效,当你请求Y年的最后一周时,它可能会返回Y+1年的第1周的日期。我会处理掉它。
static DateTime GetLastDayOfWeek(DateTime date)
{
    var lastDayOfWeek = date.AddDays((DayOfWeek.Saturday - date.DayOfWeek + 7) % 7);
    if (lastDayOfWeek.Year != date.Year)
        lastDayOfWeek = new DateTime(date.Year, 12, 31);
    return lastDayOfWeek;
}
   public class DateTimeSpan
    {
        public DateTime WeekStartDate;
        public DateTime WeekEndDate;
        public DateTime MonthStartDate;
        public DateTime MonthEndDate;
        public DateTime YearStartDate;
        public DateTime YearEndDate;
        public int WeekNum;

    }

    public static DateTimeSpan TimeProperties(this DateTime str)
    {
        if (str == null) return null;
        DateTimeSpan dts = new DateTimeSpan();
        dts.WeekNum=     CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(str, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
        dts.WeekStartDate = GetFirstDayOfWeek(str);
        dts.WeekEndDate = GetLAstDayOfWeek(str);
        dts.MonthStartDate = new DateTime(str.Year, str.Month, 1);
        int numberOfDays = DateTime.DaysInMonth(str.Year, str.Month);
        DateTime last = new DateTime(str.Year, str.Month, numberOfDays);
        dts.MonthEndDate = last;
        dts.YearStartDate = new DateTime(str.Year, 1, 1);
        numberOfDays = DateTime.DaysInMonth(str.Year, 12);
        last = new DateTime(str.Year, 12, numberOfDays);
        dts.YearEndDate = last;

        return dts;
    }


    static DateTime GetFirstDayOfWeek(DateTime date)
    {
        var firstDayOfWeek = date.AddDays(-((date.DayOfWeek - DayOfWeek.Sunday + 7) % 7));
        if (firstDayOfWeek.Year != date.Year)
            firstDayOfWeek = new DateTime(date.Year, 1, 1);
        return firstDayOfWeek;
    }

    static DateTime GetLAstDayOfWeek(DateTime date)
    {
        var firstDayOfWeek = date.AddDays(((DayOfWeek.Saturday - date.DayOfWeek + 7) % 7));
        if (firstDayOfWeek.Year != date.Year)
            firstDayOfWeek = new DateTime(date.Year, 12, 31);
        return firstDayOfWeek;
    }