Python實踐——datetime日期操作指令碼

來源:互聯網
上載者:User
#!/usr/bin/python# -*- coding: utf-8 -*-#countDays.py# version 0.10      edited by lingyue.wkl 20110819 11:00:00# version 0.11      modified by lingyue.wkl 20110820 11:37:00   add functions for days list#this script count days,between two date or one date and the days between them#考慮下,很多方法可以抽象出來,進一步最佳化,先期先實現功能吧#下一個版本  改進所有函數,最佳化之,抽象之import time,getopt,sys,datetimedef date_to_str(in_date):    return str(in_date)[:10]#計算兩個日期之間相隔天數def get_count_between_two_date(begin_date,end_date):  b_date = begin_date.split("-")  b_date = [int(num) for num in b_date]  b_date_time = datetime.datetime(b_date[0],b_date[1],b_date[2])  e_date = end_date.split("-")  e_date = [int(num) for num in e_date]  e_date_time = datetime.datetime(e_date[0],e_date[1],e_date[2])  return (e_date_time - b_date_time).days#計算某個日期前n天是哪一天   預設日期是今天def get_n_days_before_or_after_oneday(n_days,in_date=str(datetime.date.today())[:10]):  begin_date = in_date.split("-")  begin_date = [int(num) for num in begin_date]  return str(datetime.datetime(begin_date[0],begin_date[1],begin_date[2]) + datetime.timedelta(days=n_days))[:10]def get_year():    return str(datetime.date.today())[:4]def get_month():    return str(datetime.date.today())[5:7]def get_day():    return str(datetime.date.today())[8:]def get_now():    return datetime.datetime.now()def get_today():    return datetime.date.today()def get_yesterday():  return get_n_days_before_or_after_oneday(-1,str(datetime.date.today())[:10])def get_tomorrow():  return get_n_days_before_or_after_oneday(1,str(datetime.date.today())[:10])#兩個日期之間  n天的日期列表def get_n_daystimes_list_of_two_date(begin_date,end_date):  b_date = begin_date.split("-")  b_date = [int(num) for num in b_date]  b_date_time = datetime.datetime(b_date[0],b_date[1],b_date[2])  e_date = end_date.split("-")  e_date = [int(num) for num in e_date]  e_date_time = datetime.datetime(e_date[0],e_date[1],e_date[2])  days = (e_date_time - b_date_time).days  n_days_list = []  for i in range(0,days+1):    n_days_list.append(str(b_date_time + datetime.timedelta(days=i)))  return n_days_listdef get_n_days_list_of_two_date(begin_date,end_date):  return [str(day)[:10] for day in get_n_daystimes_list_of_two_date(begin_date,end_date)]def get_n_dayswiththreetimes_list_of_two_date(begin_date,end_date):  days =  get_n_days_list_of_two_date(begin_date,end_date)  days_three_time_list = []  for day in days:    for i in range(0,3):        if i == 0:           days_three_time_list.append(day+" 00:00:00")        elif i == 1:           days_three_time_list.append(day+" 12:00:00")        else:           days_three_time_list.append(day+" 23:59:59")  return days_three_time_list#某個日期之前n天  所有日期列表def get_n_daystimes_list_before_or_after_one_day(n_days,end_date=str(datetime.date.today())[:10]):  begin_date = get_n_days_before_or_after_oneday(n_days,end_date)  return get_n_daystimes_list_of_two_date(begin_date,end_date)def get_n_days_list_before_or_after_one_day(n_days,end_date=str(datetime.date.today())[:10]):  begin_date = get_n_days_before_or_after_oneday(n_days,end_date)  return get_n_days_list_of_two_date(begin_date,end_date)def get_n_dayswiththreetimes_list_before_or_after_one_day(n_days,end_date=str(datetime.date.today())[:10]):  begin_date = get_n_days_before_or_after_oneday(n_days,end_date)  return get_n_dayswiththreetimes_list_of_two_date(begin_date,end_date)def help_msg():  print("功能:日期相關操作")  print("選項:")  print("\t 預設,無選項,輸出當天日期,格式2011-08-20")  print("\t -y   [可選,輸出當前年份]")  print("\t -m   [可選,輸出當前月份]")  print("\t -d   [可選,輸出當前日]")  print("\t -n +-數字  [可選,計算當前日期前後多少天的日期,數字為負表示往前]")  print("\t -f 2011-10-22[可選,指定座標日期,即以指定日期開始計算,若不指定,座標日期為當天]")  print("\t -t 2011-10-25  [可選,目標日期,可用於計算兩個日期相隔天數]")  print("\t -l [1|2|3]  [可選,是否列表,若選定,輸出日期間的所有序列,1 2 3 代表三種不同格式]")  sys.exit(0)def print_list(l):  for i in l:    print(i)#print(get_year())#print(get_month())#print(get_day())#print(get_now())#print(get_today())#print(get_yesterday())#print(get_tomorrow())#print(get_n_days_before_or_after_oneday(2,"2011-08-20"))#print(get_n_daystimes_list_of_two_date("2011-08-01","2011-08-05"))#print(get_n_days_list_of_two_date("2011-08-01","2011-08-05"))#print(get_n_dayswiththreetimes_list_of_two_date("2011-08-01","2011-08-05")) #print(get_n_daystimes_list_before_or_after_ond_day(-5,"2011-08-20"))#print(get_n_days_list_before_or_after_ond_day(-5,"2011-08-20"))#print(get_n_dayswiththreetimes_list_before_or_after_ond_day(-5,"2011-08-20"))#程式入口,讀入參數,執行def main():    is_list = False    try:        opts,args = getopt.getopt(sys.argv[1:],"n:f:t:o:ymdhrl:")                if len(opts) == 0:          print(get_today())          sys.exit(0)        for op,value in opts:          if op in ("-h","-H","--help"):            help_msg()          if op == "-y":            print(get_year())            sys.exit(0)          elif op == "-m":            print(get_month())            sys.exit(0)          elif op == "-d":            print(get_day())            sys.exit(0)          elif op == "-n":            n_days = int(value)          elif op == "-f":            from_date = value          elif op == "-t":            to_date = value          elif op == "-l":            is_list = True            list_type = value    except getopt.GetoptError:      print(sys.argv[0]+" : params are not defined well!")    #if "n_days" not in dir() and "from_date" not in dir() and "to_date" not in dir():    #     print(result_str)       if "n_days" in dir() and "from_date" not in dir() and "to_date" not in dir():      if not is_list:         print(get_n_days_before_or_after_today(n_days))      else:         if list_type == "1":           result_list = get_n_days_list_before_or_after_one_day(n_days)         elif list_type == "2":           result_list = get_n_daystimes_list_before_or_after_one_day(n_days)         elif list_type == "3":           result_list = get_n_dayswiththreetimes_list_before_or_after_one_day(n_days)         print_list(result_list)       if "n_days" in dir() and "from_date" in dir() and "to_date" not in dir():      if not is_list:         print(get_n_days_before_or_after_oneday(n_days,from_date))      else:         if list_type == "1":           result_list = get_n_days_list_before_or_after_one_day(n_days,from_date)         elif list_type == "2":           result_list = get_n_daystimes_list_before_or_after_one_day(n_days,from_date)         elif list_type == "3":           result_list = get_n_dayswiththreetimes_list_before_or_after_one_day(n_days,from_date)         print_list(result_list)    if "n_days" not in dir() and "from_date" in dir() and "to_date" in dir():      if not is_list:         print(get_count_between_two_date(from_date,to_date))      else:         if list_type == "1":           result_list = get_n_days_list_of_two_date(from_date,to_date)         elif list_type == "2":           result_list = get_n_daystimes_list_of_two_date(from_date,to_date)         elif list_type == "3":           result_list = get_n_dayswiththreetimes_list_of_two_date(from_date,to_date)         print_list(result_list)            main()

最近需要做一些日期的操作,寫了一個指令碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.