成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

[Python實(shí)踐] 利用python實(shí)現(xiàn)的日期映射禮拜X的簡(jiǎn)單實(shí)現(xiàn)

Terry_Tai / 1806人閱讀

摘要:日期轉(zhuǎn)換程序思想言歸正傳。下述代碼以年與年為例,給出了兩年每個(gè)月份的天數(shù)以及每年月日的禮拜日期,以此作為起點(diǎn)計(jì)算該年中任意一個(gè)日期的禮拜時(shí)間。

[Python實(shí)踐] 利用python實(shí)現(xiàn)的日期映射禮拜X的簡(jiǎn)單實(shí)現(xiàn)
2018年12月19日

最近在處理分析數(shù)據(jù)的時(shí)候,突發(fā)奇想試著從用戶(hù)離職的日期上判斷是主動(dòng)辭職還是被動(dòng)解雇?數(shù)據(jù)的背景是美國(guó)某企業(yè)員工離職日期數(shù)據(jù),根據(jù)美國(guó)常見(jiàn)的周薪/半月薪發(fā)放方式,初步假定主動(dòng)辭職的人一般會(huì)選擇拿到該周工資后離職,因此更傾向于后半周;而解雇則隨時(shí)可以發(fā)生,然而發(fā)生在前半周的離職行為很大程度上推測(cè)是被動(dòng)解雇。


日期轉(zhuǎn)換程序思想

言歸正傳。

網(wǎng)上打開(kāi)現(xiàn)成的日歷程序可以方便地手動(dòng)查找任意日期對(duì)應(yīng)的信息,如禮拜幾/陰歷/風(fēng)水信息/節(jié)日等;然而如果你有一個(gè)幾千樣本的用戶(hù)離職日期,上述方法就不現(xiàn)實(shí)了,作為一個(gè)Python Coder,想到即是做到,決定順手寫(xiě)個(gè)映射日期到禮拜幾的小模塊。

主要思想

將日期轉(zhuǎn)換成禮拜幾有很多方法,但是核心都離不開(kāi)下述幾點(diǎn)知識(shí):

總體思想是找到一個(gè)起始日期Start_Date,然后計(jì)算查詢(xún)?nèi)掌?em>Map_Date距離起始日期的偏移天數(shù),然后mod 7即可;

計(jì)算需要知曉每年各個(gè)月份的天數(shù),一三五七八十臘有31天是你應(yīng)該基本知曉的常識(shí),其余月份除了2月份外,都是30天;

2月份的天數(shù)與閏年平年有關(guān),凡是能夠被4整除卻不能被100整除的即為閏年,否則為平年

需要特別注意的是,計(jì)算日期偏移的時(shí)候是通過(guò)mod 7將所有的天數(shù)映射到了0~6之間(運(yùn)算等同與除以7得到的余數(shù)集合),可以得到公式:

$$ Weekday_-index = [Weekday_-index(Start_-Date) + Count_-Deviation_-Days] mod 7 $$

大家可以想象一個(gè)寬度只有7的矩陣,Start_Date作為起點(diǎn)累加偏移天數(shù)后,效果類(lèi)似于按照寬度7進(jìn)行一行行輸入疊加,最終停止的位置即為Map_Date的禮拜時(shí)間索引。

下述代碼以2010年與2011年為例,給出了兩年每個(gè)月份的天數(shù)以及每年1月1日的禮拜日期,以此作為起點(diǎn)計(jì)算該年中任意一個(gè)日期的禮拜時(shí)間。

def Transfor_Date_2_Weekdays(date):
    # date: 2010-01-02
    # 靜態(tài)數(shù)據(jù)
    # 一年有 12個(gè)月,其中:
    #
    # 一月,三月,五月,七月,八月,十月,十二月都有31天。
    #
    # 四月,六月,九月,十一月都是30天。
    cnt_10year_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    cnt_11year_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]


    start_weekday_10 = 4  # 2010-01-01是禮拜五
    start_year_10 = 2010
    start_month_10 = 1
    start_day_10 = 1
    start_weekday_11 = 5 # 2011-01-01是禮拜六
    start_year_11 = 2011
    start_month_11 = 1
    start_day_11 = 1


    # 分析輸入的日期對(duì)應(yīng)的禮拜幾
    year = float(date[:4])
    month = float(date[5:7])
    day = float(date[8:])

    cnt_days = 0 #相對(duì)于對(duì)應(yīng)年的1月1日的偏移
    if year == 2010:
        print cnt_10year_days, "
"
        j = 0
        while j < month - 1:
            cnt_days += cnt_10year_days[j]
            j += 1
            continue
        cnt_days += day
        cnt_days -= 1 # 減去1月1日自身一天
        #print date, "is from 2010-01-01", cnt_days, "天
"
        #print cnt_days % 7, "
"
        #print start_weekday_10, "
"
        weekday = (start_weekday_10 + cnt_days) % 7 + 1
        print date, "response to weekday is ", weekday, "
"
        return weekday
    if year == 2011:
        # 需要以2011-01-01為起點(diǎn)
        j = 0
        while j < month - 1:
            cnt_days += cnt_11year_days[j]
            j += 1
            continue
        cnt_days += day
        cnt_days -= 1 # 減去自身一天
        print date, "is from 2011-01-01", cnt_days, "天
"
        print cnt_days % 7, "
"
        print start_weekday_11, "
"
        weekday = (start_weekday_11 + cnt_days) % 7 + 1
        print date, "response to weekday is ", weekday, "
"
        return weekday

具體運(yùn)行只需要一句代碼:

weekday = Transfor_Date_2_Weekdays(Map_Date)

然后輸入日期測(cè)試:

2010-02-28 response to weekday is  7.0  # 禮拜天

2010-05-19 response to weekday is 3.0 # 禮拜三

2011-09-12 response to weekday is 1.0 # 禮拜一

通過(guò)日歷驗(yàn)證全部通過(guò)!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42863.html

相關(guān)文章

  • Python 進(jìn)階之路 (十一) 再立Flag, 社區(qū)最全itertools深度解析(下)

    摘要:將每一行作為返回,其中是每行中的列名。對(duì)于每一行,都會(huì)生成一個(gè)對(duì)象,其中包含和列中的值。它返回一個(gè)迭代器,是迭代結(jié)果都為的情況。深度解析至此全劇終。 簡(jiǎn)單實(shí)戰(zhàn) 大家好,我又來(lái)了,在經(jīng)過(guò)之前兩篇文章的介紹后相信大家對(duì)itertools的一些常見(jiàn)的好用的方法有了一個(gè)大致的了解,我自己在學(xué)完之后仿照別人的例子進(jìn)行了真實(shí)場(chǎng)景下的模擬練習(xí),今天和大家一起分享,有很多部分還可以?xún)?yōu)化,希望有更好主意...

    tomorrowwu 評(píng)論0 收藏0
  • 利用MongoDB分析Nginx日志

    摘要:通過(guò)通過(guò)入庫(kù)后使用進(jìn)行查詢(xún)的方式可以通過(guò)如下種圖片來(lái)查看在上圖中主要是查看日志中請(qǐng)求狀態(tài)碼的總數(shù)量。 原文地址: http://52sox.com/use-mongodb-... 在項(xiàng)目開(kāi)發(fā)過(guò)程中,總是離不開(kāi)日志解析的工作,雖然有些時(shí)候覺(jué)得確實(shí)挺繁瑣的,但是靜下心來(lái)會(huì)發(fā)現(xiàn)有時(shí)候也是挺有趣的1件工作。 在這里,我們要從日志文件中找出IP訪問(wèn)最多的10條記錄,然后判斷其是否合法,從而采取...

    edgardeng 評(píng)論0 收藏0
  • 利用MongoDB分析Nginx日志

    摘要:通過(guò)通過(guò)入庫(kù)后使用進(jìn)行查詢(xún)的方式可以通過(guò)如下種圖片來(lái)查看在上圖中主要是查看日志中請(qǐng)求狀態(tài)碼的總數(shù)量。 原文地址: http://52sox.com/use-mongodb-... 在項(xiàng)目開(kāi)發(fā)過(guò)程中,總是離不開(kāi)日志解析的工作,雖然有些時(shí)候覺(jué)得確實(shí)挺繁瑣的,但是靜下心來(lái)會(huì)發(fā)現(xiàn)有時(shí)候也是挺有趣的1件工作。 在這里,我們要從日志文件中找出IP訪問(wèn)最多的10條記錄,然后判斷其是否合法,從而采取...

    LiuZh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<