【问题标题】:Calculate the start-date and name of a quarter from a given date从给定日期计算季度的开始日期和名称
【发布时间】:2010-12-02 07:13:31
【问题描述】:

如何从给定日期找到季度的开始日期和名称(1、2、3 等)?

【问题讨论】:

    标签: c# date


    【解决方案1】:

    类似的东西(未经测试):

    DateTime date;
    int quarterNumber = (date.Month-1)/3+1;
    DateTime firstDayOfQuarter = new DateTime(date.Year, (quarterNumber-1)*3+1,1);
    DateTime lastDayOfQuarter = firstDayOfQuarter.AddMonths(3).AddDays(-1);
    

    【讨论】:

    • @roosteronacid: (quarterNumber-1)*3+1 将给出给定季度第一个月的月份数。该代码为一年中该月的第一天创建一个DateTime。那是本季度的第一天。然后它增加了三个月。这将是下一个季度的第一天,因此通缉季度的最后一天将是前一天(.AddDays(-1) 做到了这一点)。
    • 在此处查看@il_guru 答案=> stackoverflow.com/questions/11154673/…
    • @Joe,您为什么使用3+1 而不仅仅是4,有什么原因吗?
    • @simonlchilds - 是的,它乘以三然后加一,而不是乘以四。 IE。相当于((date.Month-1)/3) + 1 和((quarter-1)*3) + 1
    • 代码有错误。如果是 01.01.2017,您将在该季度的第一天得到错误的年份。将是 01.10.2017。获得var firstDayOfQuarter = new DateTime(date.AddMonths(-3).Year, (quarterNumber-1)*3+1,1);第一天的正确方法
    【解决方案2】:
    int GetQuarterName(DateTime myDate)
    {
        return (int)Math.Ceiling(myDate.Month / 3.0);
    }
    
    DateTime GetQuarterStartingDate(DateTime myDate)
    {
        return new DateTime(myDate.Year,(3*GetQuarterName(myDate))-2,1);
    }
    

    GetQuarterName获取当前月份数/3的“下一个”整数值。

    GetQuarterStartingDate 使用来自 GetQuarterName 的输出来计算月份值、原始日期的年份部分,以及 1 表示要返回的月份的第一天。

    (对不起,我感冒了。:()

    【讨论】:

      【解决方案3】:

      https://msdn.microsoft.com/en-us/library/ms127415(v=vs.110).aspx

      using Microsoft.VisualBasic;
      var quarter = DateAndTime.DatePart(DateInterval.Quarter, (DateTime)dateTimePickerDateTime.Value);
      

      【讨论】:

        【解决方案4】:
                var date = new DateTime(2015, 3, 15);
        
                var quarter = (date.Month + 2) / 3;
        
                var quarterStartMonth = 3 * quarter - 2;
        
                var quarterStartDate = new DateTime(date.Year, quarterStartMonth, 1);
        

        【讨论】:

          【解决方案5】:

          我认为这个解决方案会很好用。它占用更多的线路,总线很冗长! `

          private DateTime GetFirstDayOfYearlyQuarter(DateTime value)
          {
              switch (value.Month)
              {
                  case 1:
                  case 2:
                  case 3:
                      return new DateTime(value.Year, 1, 1);
                  case 4:
                  case 5:
                  case 6:
                      return new DateTime(value.Year, 4, 1);
                  case 7:
                  case 8:
                  case 9:
                      return new DateTime(value.Year, 7, 1);
                  case 10:
                  case 11:
                  case 12:
                      return new DateTime(value.Year, 10, 1);
                  default:
                      throw new Exception(@"¯\_(ツ)_/¯");
              }
          }
          

          `

          附:这只查找季度的第一天,但​​您可以轻松扩展它以查找季度数等。

          【讨论】:

            【解决方案6】:
            DateTime date;
            int quarterNumber = (date.Month-1)/3+1;
            DateTime firstDayOfQuarter = new DateTime(date.Year, (quarterNumber-1)*3+1,1);
            DateTime lastDayOfQuarter = firstDayOfQuarter.AddMonths(3).AddDays(-1);
            

            【讨论】:

            • 欢迎来到 Stack Overflow。没有任何解释的代码转储很少有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请edit您的问题并解释它如何比 OP 提供的更好。见How to Answer。
            【解决方案7】:

            带有现场演示的更简单的两班轮 here + 按 F8 运行。

            var date = DateTime.Now; //Give you own DateTime
            int offset = 2, monthsInQtr = 3;
            
            var quarter = (date.Month + offset) / monthsInQtr; //To find which quarter 
            var totalMonths = quarter * monthsInQtr;
            
            var startDateInQtr = new DateTime(date.Year, totalMonths - offset, 1); //start date in quarter 
            

            如果您正在查看本季度的最后一天,请使用 DateTime.DaysInMonth

            var endDateInQtr = new DateTime(date.Year, totalMonths, DateTime.DaysInMonth(date.Year, totalMonths));
            

            【讨论】:

              【解决方案8】:
                  public static class DateTimeExtensions
              {
                  public static DateTime StartOfQuarter(this DateTime _date)
                  {
                      var quarter = decimal.ToInt16(Math.Ceiling(_date.Month / 3.0m));
                      return new DateTime(_date.Year, quarter, 1);
                  }
              }
              

              使用

              var quarterStart = DateTime.Today.StartOfQuarter();
              

              【讨论】:

                猜你喜欢
                • 2018-12-28
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多