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

資訊專欄INFORMATION COLUMN

如何使用Python+SeaTable實(shí)現(xiàn)計(jì)算兩個(gè)工作日天數(shù)

89542767 / 451人閱讀

  小編寫這篇文章的一個(gè)主要目的,主要是用來給大家繼續(xù)講解關(guān)于python的一些實(shí)例,比如綜合運(yùn)用Python+SeaTable,運(yùn)用這個(gè)技能,可以實(shí)現(xiàn)相關(guān)的一些計(jì)算技能。比如可以實(shí)現(xiàn)連續(xù)性的計(jì)算兩個(gè)工作日天數(shù),下面給大家詳細(xì)解答下。


  當(dāng)我們計(jì)算兩個(gè)日期間的間隔天數(shù)時(shí),通常是用結(jié)束日期減去開始日期,但在實(shí)際的項(xiàng)目管理、任務(wù)管理、工作計(jì)劃等場景中,某些時(shí)間段會(huì)涉及雙休日、法定節(jié)假日,甚至還有公司自定義的工作時(shí)間安排,所以就需要計(jì)算出兩個(gè)日期間的實(shí)際工作日天數(shù)。比如一個(gè)表格中有多條任務(wù),每條任務(wù)都有各自的開始日期、計(jì)劃結(jié)束日期或?qū)嶋H結(jié)束日期,那么如何自動(dòng)計(jì)算出兩個(gè)日期間的實(shí)際工作日天數(shù),以便做到精細(xì)和量化呢。


  此時(shí),萬能的Python就可以出場了,而用Python+SeaTable來實(shí)現(xiàn)則會(huì)更加方便工作管理。本文重點(diǎn)分享思路和代碼,僅供參考。


  SeaTable表格有豐富的數(shù)據(jù)類型,如日期、單選、協(xié)作人、公式、按鈕等等,可以方便又規(guī)范地管理各類信息。此外,還有很多基礎(chǔ)功能和擴(kuò)展功能,這其中就包括腳本功能。在表格上點(diǎn)擊“腳本”按鈕,可以導(dǎo)入或新建多個(gè)腳本,隨時(shí)一鍵運(yùn)行即可(如需設(shè)置定期運(yùn)行等可在“自動(dòng)化規(guī)則”中實(shí)現(xiàn))。


  比如在下面這個(gè)表格中,開始時(shí)間由項(xiàng)目管理者填寫;結(jié)束時(shí)間由每個(gè)任務(wù)負(fù)責(zé)人在完成項(xiàng)目時(shí)填寫;工作日(天數(shù))則根據(jù)開始時(shí)間和結(jié)束時(shí)間,運(yùn)行Python腳本計(jì)算得出。

01.png

  在SeaTable表格上新建Python腳本


  具體來看。首先,我們打開腳本功能,選擇“新建腳本”,選擇Python。

02.png

  思路


  在打開的界面中,就可以對(duì)腳本進(jìn)行編寫了。


  在此處計(jì)算工作日的腳本編寫過程中需要注意幾個(gè)問題,以中國為例:


  來年的工作日、休息日,暫不支持(因國家暫未發(fā)布安排)。


  需要定義平日中休息的日期,即周一到周五哪天休息。


  需要定義周末中工作的日期,即周六、周日哪天調(diào)休。


  代碼


  把以上的特殊日期一一列出來,這個(gè)腳本就不難編寫了,以下給出一些腳本片段,以2022年為例。


  import datetime
  from enum import Enum
  from seatable_api import dateutils,Base,context
  #一個(gè)Base的授權(quán)信息
  SERVER_URL=context.server_url or'https://cloud.seatable.cn'
  API_TOKEN=context.api_token or'dd46f9ca0172a850a0922107a6b2e6b99932b040'
  #1.定義中國的節(jié)假日概況
  class Holiday(Enum):
  new_years_day="元旦"
  spring_festival="春節(jié)"
  tomb_sweeping_day="清明"
  labour_day="勞動(dòng)節(jié)"
  dragon_boat_festival="端午"
  national_day="國慶節(jié)"
  mid_autumn_festival="中秋"
  #2.列出節(jié)假日列表,此處可以去查詢?nèi)諝v,就不一一列出了
  holidays={
  datetime.date(year=2022,month=1,day=1):Holiday.new_years_day.value,
  datetime.date(year=2022,month=1,day=2):Holiday.new_years_day.value,
  datetime.date(year=2022,month=1,day=3):Holiday.new_years_day.value,
  datetime.date(year=2022,month=1,day=31):Holiday.spring_festival.value,
  datetime.date(year=2022,month=2,day=1):Holiday.spring_festival.value,
  .....
  }
  #3.列出調(diào)休日的列表,及周六日為工作日的列表
  workdays={
  datetime.date(year=2022,month=1,day=29):Holiday.spring_festival.value,
  datetime.date(year=2022,month=1,day=30):Holiday.spring_festival.value,
  datetime.date(year=2022,month=4,day=2):Holiday.tomb_sweeping_day.value,
  datetime.date(year=2022,month=4,day=24):Holiday.labour_day.value,
  datetime.date(year=2022,month=5,day=7):Holiday.labour_day.value,
  datetime.date(year=2022,month=10,day=8):Holiday.national_day.value,
  datetime.date(year=2022,month=10,day=9):Holiday.national_day.value,
  ....
  }
  #4.定義是否是工作日
  def is_workday(date):
  '''
  工作日定義:
  1.日期在workdays字典的key中
  2.星期是周一到周五且不在holidays字典的key中
  '''
  date=_validate_date(date)
  weekday=date.weekday()
  return bool(date in workdays.keys()or(weekday<=4 and date not in holidays.keys()))
  #5.計(jì)算兩個(gè)日期之間的工作日,此處返回的是工作日的列表,該列表的長度即是工作日的天數(shù)
  def get_workdays(start,end):
  """
  獲取兩個(gè)日期之間的工作日,返回datetime的列表
  """
  start,end=_validate_date(start,end)
  return list(filter(is_workday,get_dates(start,end)))
  #6.將結(jié)果寫入SeaTable
  def calculate_base_workdays(base,table_name):
  '''
  通過seatable表格中的,開始日期,結(jié)束日期,計(jì)算兩個(gè)日期間工作日的天數(shù),并把其更新到該行的
  工作日字段中
  '''
  for row in base.list_rows(table_name):
  row_id=row.get('_id')
  start_date=row.get("開始日期")
  end_date=row.get("結(jié)束日期")
  if not(start_date and end_date):
  continue
  try:
  work_day_list=get_workdays(start_date,end_date)
  #兩個(gè)日期間的工作日天數(shù)
  work_day_counts=len(work_day_list)
  cell_value=row.get("工作日")
  if cell_value==work_day_counts:
  continue
  base.update_row(
  table_name,
  row_id,
  {
  "工作日":work_day_counts
  }
  )
  except Exception as e:
  print("start date:%s,end date:%s,error:%s"%(start_date,end_date,e))
  continue
  base=Base(API_TOKEN,SERVER_URL)
  base.auth()
  calculate_base_workdays(base,"工作任務(wù)安排")


  總結(jié)


  SeaTable作為一款以在線協(xié)同表格為基礎(chǔ)的新型數(shù)字化平臺(tái),功能豐富,使用靈活,能幫我們實(shí)現(xiàn)一體化數(shù)據(jù)管理和處理。當(dāng)我們需要快速地開發(fā)自定義數(shù)據(jù)處理流程時(shí),就可以使用它完善的Python API功能,能節(jié)省很多成本。具體到本案例中,除了使用Python來計(jì)算兩個(gè)日期間的工作日外,還可以使用表格的日歷插件、時(shí)間線插件、高級(jí)統(tǒng)計(jì)插件來進(jìn)行查看和做可視化圖表分析,讓項(xiàng)目管理更方便,實(shí)現(xiàn)應(yīng)用更簡單。


  到此為止,這篇文章就給大家解答完畢了,希望可以給大家?guī)砀鄮椭?/p>

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

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

相關(guān)文章

  • 代碼中的人文故事:從一個(gè)Java的“Bug”說起

    摘要:緣起這幾日閑來無事擼代碼,無意中發(fā)現(xiàn)一樁趣事。原以為是一個(gè)的,沒想到經(jīng)過一系列死磕,挖掘出了一段和中國歷史乃至人類文明相關(guān)聯(lián)的人文故事,不禁唏噓感嘆一番。 緣起 這幾日閑來無事擼代碼,無意中發(fā)現(xiàn)一樁趣事。原以為是一個(gè)Java的bug,沒想到經(jīng)過一系列死磕,挖掘出了一段和中國歷史乃至人類文明相關(guān)聯(lián)的人文故事,不禁唏噓感嘆一番。 這件事的緣起很簡單,我在實(shí)現(xiàn)計(jì)算兩個(gè)日期天數(shù)距離邏輯的過程中...

    daryl 評(píng)論0 收藏0
  • [Python實(shí)踐] 利用python實(shí)現(xiàn)的日期映射禮拜X的簡單實(shí)現(xiàn)

    摘要:日期轉(zhuǎn)換程序思想言歸正傳。下述代碼以年與年為例,給出了兩年每個(gè)月份的天數(shù)以及每年月日的禮拜日期,以此作為起點(diǎn)計(jì)算該年中任意一個(gè)日期的禮拜時(shí)間。 [Python實(shí)踐] 利用python實(shí)現(xiàn)的日期映射禮拜X的簡單實(shí)現(xiàn) 2018年12月19日 最近在處理分析數(shù)據(jù)的時(shí)候,突發(fā)奇想試著從用戶離職的日期上判斷是主動(dòng)辭職還是被動(dòng)解雇?數(shù)據(jù)的背景是美國某企業(yè)員工離職日期數(shù)據(jù),根據(jù)美國常見的周薪/半月薪...

    Terry_Tai 評(píng)論0 收藏0
  • 算法——指定日期的星期推算

    摘要:儒略日就是指從公元前年月日開始所經(jīng)過的天數(shù),就被指定為公元前年月日到公元前年月日之間的小時(shí),依次順推,每一天都被賦予一個(gè)唯一的數(shù)字。 ??最近閑來無事,突然想了解下中國農(nóng)歷與中國陽歷之間的關(guān)系,經(jīng)過一番調(diào)研發(fā)現(xiàn)這里面的水還比較深,涉及天文學(xué)、歷史、宗教等一些知識(shí),發(fā)現(xiàn)挺有意思的就準(zhǔn)備做一系列的總結(jié),主要是防止自己忘記了,而且搜索了一下簡書上的文章也么沒有相關(guān)文章進(jìn)行描述,所以借此機(jī)會(huì)跟...

    AbnerMing 評(píng)論0 收藏0
  • 如何計(jì)算CDS view里兩個(gè)時(shí)間戳之間的天數(shù)間隔

    摘要:透明表里的時(shí)間戳,數(shù)據(jù)類型為有個(gè)需求計(jì)算這兩個(gè)時(shí)間戳之間的天數(shù)間隔,丟棄時(shí)間戳年月日位后面的小時(shí)分鐘秒。直接用的字符串操作函數(shù)是不行的,因?yàn)闀r(shí)間戳類型和期待的字符串類型不匹配。 ABAP透明表里的時(shí)間戳,數(shù)據(jù)類型為dec: showImg(https://segmentfault.com/img/remote/1460000016828137); showImg(https://seg...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<