時間模塊經常使用操做總結爲下列各個函數:python
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import time import datetime import calendar def second_to_datetime_string(seconds): """ 將從公元0年開始的秒數轉換爲datetime的string形式 :param seconds: 從公元0年開始的秒數 :return: datetime的string形式 """ s = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(float(seconds))) year = s.split('-', 1)[0] rest = s.split('-', 1)[1] year = int(year) - 1970 # datetime是從1970開始的,所以計算時須要減去1970 return '{}-{}'.format(str(year), rest) def gregorian_date_to_str(year, month, day): """ 將公元日期轉換成字符串,year佔4位,month佔2位,day佔2位,位數不足補0 :param year: 年份,例如2017 :param month: 月份,例如8或者08 :param day: 天,例如12或者02或者2 :return: 返回位數固定的字符串,例如2017-08-22 """ return '{}-{}-{}'.format( year, month if len(str(month)) == 2 else '0{}'.format(month), day if len(str(day)) == 2 else '0{}'.format(day) ) def gregorian_date_to_str_1(year, month, day): """ 將公元日期轉換成字符串,year佔4位,month佔2位,day佔2位,位數不足補0 :param year: 年份,例如2017 :param month: 月份,例如8或者08 :param day: 天,例如12或者02或者2 :return: 返回位數固定的字符串,不帶-,例如20170822 """ return '{}{}{}'.format( year, month if len(str(month)) == 2 else '0{}'.format(month), day if len(str(day)) == 2 else '0{}'.format(day) ) def get_element_from_date_str(date_str): """獲取一個日期字符串的年月日""" return date_str[0:4], date_str[4:6], date_str[6:8] def is_valid_date(date_str): """判斷是不是一個有效的日期字符串""" try: time.strptime(date_str, '%Y%m%d') return True except ValueError: return False def get_latter_1_day_str(date_str): """ 獲取data_str後一天的日期字符串 :param date_str: 指定日期字符串 :return: 返回指定日期字符串後一天的日期字符串 """ dt = datetime.datetime.strptime(date_str, '%Y%m%d') one_day = datetime.timedelta(days=1) former_day = dt + one_day return former_day.strftime('%Y%m%d') def get_latter_n_day_str(date_str, n): """ 獲取data_str後n天的日期字符串 :param date_str: 指定日期字符串 :return: 返回指定日期字符串後n天的日期字符串 """ dt = datetime.datetime.strptime(date_str, '%Y%m%d') one_day = datetime.timedelta(days=days) former_day = dt + one_day return former_day.strftime('%Y%m%d') def get_yesterday_str(): """ 獲取昨天的日期字符串 :return: 返回昨天日期字符串 """ today = datetime.date.today() one_day = datetime.timedelta(days=1) yesterday = today - one_day return yesterday.strftime('%Y%m%d') def get_former_1_day_str(date_str): """ 獲取data_str前一天的日期字符串 :param date_str: 指定日期字符串 :return: 返回指定日期字符串前一天的日期字符串 """ dt = datetime.datetime.strptime(date_str, '%Y%m%d') one_day = datetime.timedelta(days=1) former_day = dt - one_day return former_day.strftime('%Y%m%d') def get_former_n_day_str(date_str, n): """ 獲取data_str前n天的日期字符串 :param date_str: 指定日期字符串 :param n: number of day :return: 返回指定日期字符串前n天的日期字符串 """ dt = datetime.datetime.strptime(date_str, '%Y%m%d') n_day = datetime.timedelta(days=n) former_n_day = dt - n_day return former_n_day.strftime('%Y%m%d') def get_universal_time(): """ 獲取當前時間 :return: 返回當前時間,格式:2017-08-29 02:43:19 """ t = time.gmtime() time_tuple = (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec) dt = datetime.datetime(*time_tuple) return dt.strftime('%Y-%m-%d %H:%M:%S') def datetime_to_gregorian_seconds(dt): """ 獲取從公元0年1月1日開始到當天0點所通過的秒數 :param dt: datetime.datetime類型 :return: 返回從公元0年1月1日開始到當天0點所通過的秒數 """ d = dt.date() t = dt.time() # toordinal 從1年1月1日開始, erlang 的datetime_to_gregorian_seconds和date_to_gregorian_days從0年1月1日開始 # 當天不算因此須要減1天 return (d.toordinal() + 365 - 1) * 86400 + time_to_second(t.hour, t.minute, t.second) def time_to_second(time_h, time_m, time_s): """ 根據給定的time_h, time_m, time_s計算當天已過去的時間,秒爲單位 :param time_h: 小時 :param time_m: 分 :param time_s: 秒 :return: 返回計算的second """ return int(time_h) * 3600 + int(time_m) * 60 + int(time_s) def utc_time_to_second(utc_time): """ 根據給定的utc_time計算當天已過去的時間,秒爲單位 :param utc_time: utc時間戳,相似1464830584 :return: 返回計算的second """ t = datetime.datetime.fromtimestamp(int(utc_time)) return t.hour * 3600 + t.minute * 60 + t.second def get_today_start_time(): """獲取當天開始時間""" dt = datetime.datetime.combine(datetime.date.today(), datetime.time.min) return dt.strftime('%Y-%m-%d %H:%M:%S') def get_today_end_time(): """獲取當天結束時間""" dt = datetime.datetime.combine(datetime.date.today(), datetime.time.max) return dt.strftime('%Y-%m-%d %H:%M:%S') def get_final_day_of_current_week(): """獲取本週最後一天:周天""" today = datetime.date.today() sunday = today + datetime.timedelta(6 - today.weekday()) return sunday.strftime('%Y-%m-%d') def get_final_day_of_current_month(): """獲取本月最後一天""" today = datetime.date.today() _, last_day_num = calendar.monthrange(today.year, today.month) last_day = datetime.date(today.year, today.month, last_day_num) return last_day.strftime('%Y-%m-%d') def get_final_day_of_last_month(): """獲取上月最後一天,可能會跨年,須要用timedelta""" today = datetime.date.today() first = datetime.date(day=1, month=today.month, year=today.year) final_day_of_last_month = first - datetime.timedelta(days=1) return final_day_of_last_month.strftime('%Y-%m-%d') def get_final_day_of_current_month(year, month): """獲取指定年指定月的最後一天""" _, last_day_num = calendar.monthrange(year, month) return last_day_num # last_day = datetime.date(year, month, last_day_num) # return last_day.strftime('%Y-%m-%d')
記得幫我點贊哦!程序員
精心整理了計算機各個方向的從入門、進階、實戰的視頻課程和電子書,按照目錄合理分類,總能找到你須要的學習資料,還在等什麼?快去關注下載吧!!!
念念不忘,必有迴響,小夥伴們幫我點個贊吧,很是感謝。segmentfault
我是職場亮哥,YY高級軟件工程師、四年工做經驗,拒絕鹹魚爭當龍頭的斜槓程序員。聽我說,進步多,程序人生一把梭ide
若是有幸能幫到你,請幫我點個【贊】,給個關注,若是能順帶評論給個鼓勵,將不勝感激。函數
職場亮哥文章列表:更多文章學習
本人全部文章、回答都與版權保護平臺有合做,著做權歸職場亮哥全部,未經受權,轉載必究!ui