在Python中获取当前季度的第一个日期和最后日期?

时间:2016-05-10 10:22:24

标签: python-2.7

如何在Python中获取当前季度年份,然后是当前季度的第一个日期和最后日期?

我希望通过导入日期时间

import datetime

人们看待Stack溢出需要直接的答案,这应该是非常简单的。哪个链接你提供了很多评论。因此,用户必须通过所有评论才能找到正确的答案。我正在写简单直接的答案。

6 个答案:

答案 0 :(得分:4)

第一天与@ Karishh的解决方案相同。但是,对于最后一个日期,Python2.7导致第四季度出现问题。因为12 + 1 = 13而日期时间不接受13作为一个月。所以你需要做一些技巧来处理它。

import datetime


def get_quarter(date):
    return (date.month - 1) / 3 + 1

def get_first_day_of_the_quarter(date):
    quarter = get_quarter(date)
    return datetime.datetime(date.year, 3 * quarter - 2, 1)

def get_last_day_of_the_quarter(date):
    quarter = get_quarter(date)
    month = 3 * quarter
    remaining = month / 12
    return datetime.datetime(date.year + remaining, month % 12 + 1, 1) + datetime.timedelta(days=-1)

答案 1 :(得分:2)

我是如何在c#中找到一些简单的解决方案并将其转换为python的,

override func viewWillDisappear(animated: Bool) {
        print("video player is about to disapear")

        if(media().sharedInstance.playerItem != nil){
            print("video is about to end, and there is ssog playing, so lets do stuff")
            media().sharedInstance.is_Video_Player_Open = false
            media().sharedInstance.set_MP_Command()
            media().sharedInstance.set_Now_Playing()
        }
    }

答案 2 :(得分:2)

我认为当前答案在Python 3中仍然无效,因此,由于这是本季度第一天和最后一天在Google上的热门搜索,因此我将提供在Python 3中可用的解决方案(大多数是Ahmet的/ /代替/):

def get_quarter(date):
    return (date.month - 1) // 3 + 1

def get_first_day_of_the_quarter(date):
    return datetime.datetime(date.year,(date.month-1)//3+1,1)

def get_last_day_of_the_quarter(date):
    quarter = get_quarter(date)
    return datetime.datetime(date.year + 3*quarter//12, 3*quarter%12+1, 1) + datetime.timedelta(days=-1)

答案 3 :(得分:0)

以克里希(Krishh)的答案为基础,但解决了一些发现的问题:

  1. 计算第四季度的最后一天
  2. Wasae Shoaib关于引发ValueError的评论
  3. TypeError,传递的是浮点数而不是整数

取而代之的是使用relativedeta并将正确计算的开始日期偏移三个月,我们最终获得了一种更加可靠的方法来获取季度结束日期。

from datetime import datetime
from dateutil.relativedelta import relativedelta
current_date = datetime.now()
currQuarter = int((current_date.month - 1) / 3 + 1)
dtFirstDay = datetime(current_date.year, 3 * currQuarter - 2, 1)
dtLastDay = dtFirstDay + relativedelta(months=3, days=-1)

答案 4 :(得分:0)

这里有一个一/二班轮来获取当前季度的开始/结束日期。

from datetime import datetime
import math
from dateutil.relativedelta import relativedelta  # requires python-dateutil

start_of_quarter = datetime(year=datetime.now().year, month=((math.floor(((datetime.now().month - 1) / 3) + 1) - 1) * 3) + 1, day=1)

end_of_quarter = start_of_quarter + relativedelta(months=3, seconds=-1)

答案 5 :(得分:0)

我做了很多测试,以找到适合我需要的解决方案,如果它可以帮助其他人,我会很高兴:

            datval = fields.date.today()
            if datval.month < 4 :
               self.start_date = fields.date.today().replace(month=10, day=1)
               self.end_date = fields.date.today().replace(month=12, day=31)
            elif datval.month < 7 :
               self.start_date = fields.date.today().replace(month=1, day=1)
               self.end_date = fields.date.today().replace(month=3, day=31)
            elif datval.month < 10 :
               self.start_date = fields.date.today().replace(month=4, day=1)
               self.end_date = fields.date.today().replace(month=6, day=30)
            else : 
               self.start_date = fields.date.today().replace(month=7, day=1)
               self.end_date = fields.date.today().replace(month=9, day=30)