Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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# 以C获取给定年份中的ISO周数#_C#_Datetime_.net Core - Fatal编程技术网

C# 以C获取给定年份中的ISO周数#

C# 以C获取给定年份中的ISO周数#,c#,datetime,.net-core,C#,Datetime,.net Core,我正在尝试获取给定年份/闰年的ISO周数。我看到,.NETCore3.0有ISOWeek.GetWeeksInYear类,但我们正在运行.NETCore2.2.1。。。现在还不可能更新 我试过这个: var cultInfo = CultureInfo.CurrentCulture; var lastDayOfYear = new DateTime(2019, 12, 31); var numberOfWeeks = cultInfo.Calendar.GetWeekOfYear(

我正在尝试获取给定年份/闰年的ISO周数。我看到,.NETCore3.0
ISOWeek.GetWeeksInYear
类,但我们正在运行.NETCore2.2.1。。。现在还不可能更新

我试过这个:

var cultInfo = CultureInfo.CurrentCulture;
var lastDayOfYear = new DateTime(2019, 12, 31);
var numberOfWeeks = cultInfo.Calendar.GetWeekOfYear(
                                    lastDayOfYear,
                                    cultInfo.DateTimeFormat.CalendarWeekRule,
                                    DayOfWeek.Monday);
对于
2019
它返回
53
,结果与我想要的结果不符(
52
)。如果我把日期改为2020年,它就是53年,这是正确的,但是是的,不是ISO,这是我想要的

提前感谢。

您可以查看源代码并自行实现此方法(因为您不能以.NET Core 3.x为目标)

private const int week singlongyear=53;
周内的私人常数短=52;
公共静态整数GetWeeksInYear(整数年)
{
如果(年份<1 | |年份>9999)
{
抛出新ArgumentOutOfRangeException(name of(year));
}
静态int P(int y)=>(y+(y/4)-(y/100)+(y/400))%7;
如果(P(年)==4 | | P(年-1)==3)
{
每年的回归周;
}
短时间返回周;
}
然后使用它

var weeks=GetWeeksInYear(2019年)//返回52
周=一年中的一周(2020年)//返回53
请记住,从C#8开始就支持这种方法,因此您应该切换到这个版本,或者稍微重写一段代码。您可以查看源代码并自己实现这种方法(因为您不能以.NET Core 3.x为目标)

private const int week singlongyear=53;
周内的私人常数短=52;
公共静态整数GetWeeksInYear(整数年)
{
如果(年份<1 | |年份>9999)
{
抛出新ArgumentOutOfRangeException(name of(year));
}
静态int P(int y)=>(y+(y/4)-(y/100)+(y/400))%7;
如果(P(年)==4 | | P(年-1)==3)
{
每年的回归周;
}
短时间返回周;
}
然后使用它

var weeks=GetWeeksInYear(2019年)//返回52
周=一年中的一周(2020年)//返回53

请记住,从C#8开始就支持这一点,因此您应该切换到此版本或稍微重写一段代码

一年包含
53
当且仅当它包含
53
周四;因此,为了返回
53
,一年必须

  • 从周四开始
  • 是闰年,从
    周四开始
    周三开始
  • 代码:

    public static int GetWeeksInYear(int year) {
      if (year < DateTime.MinValue.Year || year > DateTime.MaxValue.Year)
        throw new ArgumentOutOfRangeException(nameof(year));
    
      var dw = new DateTime(year, 1, 1).DayOfWeek;
    
      return (dw == DayOfWeek.Thursday) || 
             (dw == DayOfWeek.Wednesday) && DateTime.IsLeapYear(year) 
        ? 53
        : 52;
    }
    
      var report = string.Join(Environment.NewLine, Enumerable
        .Range(1990, 2020 - 1990 + 1)
        .Select(year => $"{year} : {GetWeeksInYear(year)}"));
    
      Console.Write(report);
    
    1990 : 52
    1991 : 52
    1992 : 53
    1993 : 52
    1994 : 52
    1995 : 52
    1996 : 52
    1997 : 52
    1998 : 53
    1999 : 52
    2000 : 52
    2001 : 52
    2002 : 52
    2003 : 52
    2004 : 53
    2005 : 52
    2006 : 52
    2007 : 52
    2008 : 52
    2009 : 53
    2010 : 52
    2011 : 52
    2012 : 52
    2013 : 52
    2014 : 52
    2015 : 53
    2016 : 52
    2017 : 52
    2018 : 52
    2019 : 52
    2020 : 53
    
    结果:

    public static int GetWeeksInYear(int year) {
      if (year < DateTime.MinValue.Year || year > DateTime.MaxValue.Year)
        throw new ArgumentOutOfRangeException(nameof(year));
    
      var dw = new DateTime(year, 1, 1).DayOfWeek;
    
      return (dw == DayOfWeek.Thursday) || 
             (dw == DayOfWeek.Wednesday) && DateTime.IsLeapYear(year) 
        ? 53
        : 52;
    }
    
      var report = string.Join(Environment.NewLine, Enumerable
        .Range(1990, 2020 - 1990 + 1)
        .Select(year => $"{year} : {GetWeeksInYear(year)}"));
    
      Console.Write(report);
    
    1990 : 52
    1991 : 52
    1992 : 53
    1993 : 52
    1994 : 52
    1995 : 52
    1996 : 52
    1997 : 52
    1998 : 53
    1999 : 52
    2000 : 52
    2001 : 52
    2002 : 52
    2003 : 52
    2004 : 53
    2005 : 52
    2006 : 52
    2007 : 52
    2008 : 52
    2009 : 53
    2010 : 52
    2011 : 52
    2012 : 52
    2013 : 52
    2014 : 52
    2015 : 53
    2016 : 52
    2017 : 52
    2018 : 52
    2019 : 52
    2020 : 53
    

    一年包含
    53
    当且仅当它包含
    53
    周四时;因此,为了返回
    53
    ,一年必须

  • 从周四开始
  • 是闰年,从
    周四开始
    周三开始
  • 代码:

    public static int GetWeeksInYear(int year) {
      if (year < DateTime.MinValue.Year || year > DateTime.MaxValue.Year)
        throw new ArgumentOutOfRangeException(nameof(year));
    
      var dw = new DateTime(year, 1, 1).DayOfWeek;
    
      return (dw == DayOfWeek.Thursday) || 
             (dw == DayOfWeek.Wednesday) && DateTime.IsLeapYear(year) 
        ? 53
        : 52;
    }
    
      var report = string.Join(Environment.NewLine, Enumerable
        .Range(1990, 2020 - 1990 + 1)
        .Select(year => $"{year} : {GetWeeksInYear(year)}"));
    
      Console.Write(report);
    
    1990 : 52
    1991 : 52
    1992 : 53
    1993 : 52
    1994 : 52
    1995 : 52
    1996 : 52
    1997 : 52
    1998 : 53
    1999 : 52
    2000 : 52
    2001 : 52
    2002 : 52
    2003 : 52
    2004 : 53
    2005 : 52
    2006 : 52
    2007 : 52
    2008 : 52
    2009 : 53
    2010 : 52
    2011 : 52
    2012 : 52
    2013 : 52
    2014 : 52
    2015 : 53
    2016 : 52
    2017 : 52
    2018 : 52
    2019 : 52
    2020 : 53
    
    结果:

    public static int GetWeeksInYear(int year) {
      if (year < DateTime.MinValue.Year || year > DateTime.MaxValue.Year)
        throw new ArgumentOutOfRangeException(nameof(year));
    
      var dw = new DateTime(year, 1, 1).DayOfWeek;
    
      return (dw == DayOfWeek.Thursday) || 
             (dw == DayOfWeek.Wednesday) && DateTime.IsLeapYear(year) 
        ? 53
        : 52;
    }
    
      var report = string.Join(Environment.NewLine, Enumerable
        .Range(1990, 2020 - 1990 + 1)
        .Select(year => $"{year} : {GetWeeksInYear(year)}"));
    
      Console.Write(report);
    
    1990 : 52
    1991 : 52
    1992 : 53
    1993 : 52
    1994 : 52
    1995 : 52
    1996 : 52
    1997 : 52
    1998 : 53
    1999 : 52
    2000 : 52
    2001 : 52
    2002 : 52
    2003 : 52
    2004 : 53
    2005 : 52
    2006 : 52
    2007 : 52
    2008 : 52
    2009 : 53
    2010 : 52
    2011 : 52
    2012 : 52
    2013 : 52
    2014 : 52
    2015 : 53
    2016 : 52
    2017 : 52
    2018 : 52
    2019 : 52
    2020 : 53
    
    看看源代码和特定的方法,它很小很简单,你可以自己实现。看看源代码和特定的方法,它很小很简单,你可以自己实现