Python3.5笔记——第10章 日期和时间

Python3.5笔记

第10章 日期和时间

时间戳和日期

时间戳

通常,时间戳(timestamp)表示从1970年1月1日00时00分00秒开始,按秒计算的偏移量。也就是从1970年1月1日00时00分00秒开始(北京时间:1970年1月1日08时00分00秒开始)到现在的总毫秒数。

时间戳是一个经加密后形成的凭证文档,包括3个部分:

  1. 需要加时间戳的文件摘要(digest)
  2. DTS收到文件的日期和时间。
  3. DTS的数字签名。

一般来说,时间戳的产生过程为:用户首先将需要加时间戳的文件用Hash编码加密称为文件摘要,然后将摘要发送到DTS,DTS加入收入文件摘要的时间和日期信息后,再对该文件加密(数字签名),最后送回用户。

书面签署文件的时间是由签署人自己写上的,而数字时间戳是由认证单位DTS添加的,以DTS收到文件的时间为依据。

时间格式化符号

python格式化符号

格式 含义
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01-31)
%H 一天中的第几个小时(24小时制,00-23)
%I 第几个小时(12小时制,01-12)
%j 一年中的第几天(001-366)
%m 月份(01-12)
%M 分钟数(00-59)
%p 本地AM或PM的相应符
%S 秒(01-61)
%U 一年中的星期数(取值00-53,星期天为一星期的开始),第一个星期天之前的所有天数都放在0周
%w 一个星期中的第几天(0-6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一位一个星期的开始
%x 本地相应日期
%X 本地相应时间
%y 去掉实际的年份(00-99)
%Y 完整的年份
%Z 时区的名字(如果不存在未空字符)
%% %字符
  1. %p只有与%I配合使用才有效果
  2. %S文档中强调确实是0-61,而不是59,闰年占两秒
  3. %w当使用striptime函数时,只有这一年的周数和天数确定时%U和%W才会被计算

struct_time元组

struct_time元组共有9个元素:年、月、日、时、分、秒、一年中的第几周、一年中第几天、是否为夏令时。

Python函数用一个元组装起来的9组数字处理时间,也被称作struct_time元组。如下表:

序号 属性 字段
0 tm_year 4位数字 如2018
1 tm_mon 1-12
2 tm_mday 1-31
3 tm_hour 小时 0-23
4 tm_min 分钟 0-59
5 tm_sec 0-61(60或61是润秒)
6 tm_wday 一周的第几日 0-6(0是周一)
7 tm_yday 一年中的第几日 1-366
8 tm_isdst 夏令时 -1、0、1、-1是决定是否为夏令时的旗帜

time模块

time()函数

time函数用于返回当前时间的时间戳(1970年01月01日08时00分00秒到现在的浮点秒数)

time()函数的语法格式如下:

time.time()

code:

import time
print('当前的时间戳是:%f'% time.time())

输出:

当前的时间戳是:1537410262.299011

localtime([secs])函数

localtime()函数的作用是格式化时间戳为本地时间。如果secs参数未输入,就以当前时间为转换标准。语法格式如下:

time.localtime([secs])

此语法中time指的是time模块,secs指转化为time.struct_time类型的对象的秒数。该函数没有任何返回值。示例如下:

print('time.localtime()===',time.localtime())

输出:

time.localtime()=== time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=11, tm_min=10, tm_sec=9, tm_wday=3, tm_yday=263, tm_isdst=0)

gmtime([secs])函数

gmtime()函数用于将一个时间戳转换为UTC时区(0时区)的struct_time,可选的参数sec表示从1970-1-1到现在的秒数。gmtime()函数的默认值为time.time(),函数返回time.struct_time类型的对象(struct_time是在time模块中定义的表示时间的对象)。语法格式如下:

time.gmtime([secs])

此语法中的time指的是time模块,secs指转换为time.struct_time类型的对象的秒数。示例如下:

print('time.gmtime()===',time.gmtime())

输出:

time.gmtime()=== time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=3, tm_min=10, tm_sec=9, tm_wday=3, tm_yday=263, tm_isdst=0)

mktime(t)函数

mktime()函数用于执行与gmtime()、localtime()相反的操作,接收struct_time对象作为参数,返回用秒数表示时间的浮点数。如果输入的值不是合法时间,就会触发OverflowError或ValueError。语法格式如下:

time.mktime(t)

此语法中time指的是time模块,t指结构化的时间或完整的9位元组元素。返回用秒数表示时间的浮点数。示例如下:

t = (2018,9,20,11,17,0,1,198,0)
print('time.mktime(t)===',time.mktime(t))

输出:

time.mktime(t)=== 1537413420.0

asctime([t])函数

asctime()函数用于接收时间元组并返回一个可读的形式为Sun Sep 25 09:09:37 2016(2016年09月25日周日9时09分37秒)的24个字符的字符串。

asctime()函数的语法格式如下:

time.asctime([t])

此语法中time指的是time模块,t指完整的9位元组元素或通过函数gmtime()、localtime()返回的时间值。实例如下:

t = time.localtime()
print('time.asctime(t)===',time.asctime(t))

输出:

time.asctime(t)=== Thu Sep 20 11:29:15 2018

ctime([secs])函数

ctime()函数用于把一个时间戳(按秒计算的浮点数)转化为time.asctime的形式。如果为指定参数secs参数或参数为None,就会默认将time.time()作为参数。ctime的作用相当于asctime(localtime(secs))。语法格式如下:

time.ctime([secs])

time指的是time模块,secs指要转换为字符串时间的秒数。示例如下:

print('time.ctime(t)===',time.ctime())

输出:

time.ctime(t)=== Thu Sep 20 11:35:27 2018

sleep(secs)函数

sleep()函数用于推迟调用线程的运行,可通过secs指定进程挂起的时间。sleep(secs)函数的语法如下:

time.sleep(secs)

此语法中time指定是time模块,secs指推迟执行的秒数。示例如下:

print('time.start===',time.ctime())
time.sleep(5)
print('time.end===',time.ctime())

输出:

time.start=== Thu Sep 20 11:40:07 2018
time.end=== Thu Sep 20 11:40:12 2018

clock()函数

clock()函数用于以浮点数计算的浮点数返回当前CPU时间,用来衡量不同程序的耗时,比time.time()更有用。在UNIX系统上,返回的是“进程时间”,是用秒表示的浮点数(时间戳);在windows中,第一次调用返回的是进程运行的实际时间,第二次之后的调用是第一次调用后到现在的运行时间。语法格式如下:

time.clock()

此语法中,time指的是time模块,该函数不需要参数,该函数有两个功能:

  1. 在第一次调用时,返回程序运行的实际时间。
  2. 第二次调用时,返回自第一次调用后到这次调用的时间间隔。

在Win32系统下,clock()函数返回的是真实时间(wall time),而在UNIX/Linux下返回的是CPU时间。示例如下:

def producure():
    time.sleep(2)

t1 = time.clock()
producure()
print('seconds processs time:',time.clock() - t1)

t2 = time.time()
producure()
print('seconds wall time:',time.time() - t2)

输出:

seconds processs time: 1.9998607791725642
seconds wall time: 2.0001144409179688

strftime(format[,t])函数

strftime()函数用于接收时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。语法格式如下:

time.strftime(format[,t])

语法中time指的time模块,format指格式化字符串,t指可选的参数,是一个struct_time对象,t如果不传的话,指的是当前时间。示例如下:

t = (2016,9,25,17,50,38,6,48,0)
t= time.mktime(t)
print(time.strftime('%b %d %Y %d %H:%M:%S ',time.gmtime(t)))
#打印当前时间
print(time.strftime('%Y/%m/%d %H:%M:%S'))

输出:

Sep 25 2016 25 09:50:38 
2018/09/20 15:21:08

strptime(string[,format])函数

strptime()函数用于根据指定的格式把一个时间字符串解析为时间元组。语法格式如下:

time.strptime(string[,format])

此语法中time指的是time模块,string指时间字符串,format指格式化字符串。返回struct_time对象。示例如下:

struct_time = time.strptime('2018/09/20 15:21:08','%Y/%m/%d %H:%M:%S')
print('returned tuple:',struct_time)

输出如下:

returned tuple: time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=15, tm_min=21, tm_sec=8, tm_wday=3, tm_yday=263, tm_isdst=-1)

三种时间格式转换

[图片上传失败...(image-565d2e-1539315235251)]

datatime模块

datatiem是data与time的结合体,包括data与time的所有信息。datatime功能强大,支持0001到9999年。

datatime模块定义了两个常量:datatime.MINYEAR和datatime.MAXYEAR。这两个常量分别表示datatim所能表示的最小、最大年份。其中,MINYEAR = 1,MAXYEAR = 9999。

datatime模块定义了以下5个类:

  • datatime.date:表示日期的类。常用的属性有year、month、day。
  • datatime.time:表示时间的类。常用的属性有hour、minute、second、microsecond。
  • datatime.datetime:表示日期时间。
  • datatime.timedelta:表示时间间隔,即两个时间点之间的长度。
  • datatime.tzinfo:与时区有关的相关信息。

其中,datatime.datetime类的应用最为普遍,datatime.datatime类中有以下方法:

today()

today()方法的语法如下:

 datatime.datetime.today()

此语法中datatime.datetime指的是datatime.datetime类。

返回一个表示当前本地时间的datatime对象。示例如下:

import datetime
print('datetime.datetime.today() == ',datetime.datetime.today())

输出:

datetime.datetime.today() ==  2018-09-20 17:12:52.069461

now([tz])

now()语法格式如下:

datetime.datetime.now([tz])

此语法中datatime.datetime指的是datatime.datetime类。

返回一个表示当前本地时间的datatime对象。

此语法如果提供了tz参数,就获取tz参数所指时区的本地时间。

示例如下:

print('datetime.datetime.now() == ',datetime.datetime.now())

输出:

datetime.datetime.now() ==  2018-09-20 17:16:47.842946

utcnow()

utcnow()方法的语法格式如下:

datatime.datetime.utcnow()

此语法中datatime.datetime指的是datatime.datetime类。

返回一个表示当前UTC时间的datatime对象。

示例如下:

#utcnow()
print('datetime.datetime.utcnow() == ',datetime.datetime.utcnow())

输出:

datetime.datetime.utcnow() ==  2018-09-20 09:24:31.448463

fromtimestamp(timstamp[,tz])

根据时间戳创建一个datatime对象,语法格式如下:

datetime.datetime.fromtimestamp(timstamp[,tz])

此语法中datatime.datetime指的是datatime.datetime类。参数tz指定时区信息。

返回一个表示当前datatime时间的datatime对象。示例如下:

#fromtimestamp()
print('datetime.datetime.fromtimestamp(time.time()) == ',datetime.datetime.fromtimestamp(time.time()))

输出:

datetime.datetime.fromtimestamp(time.time()) ==  2018-09-20 17:30:42.857707

utcfromtimestamp(timestamp)

根据时间戳创建一个datatime对象。语法格式如下:

datetime.datetime.utcfromtimestamp(timestamp)

此语法中datatime.datetime指的是datatime.datetime类。timestamp指时间戳。返回一个datatime对象。示例如下如下:

#utcfromtimestamp()
print('datetime.datetime.utcfromtimestamp(time.time()) == ',datetime.datetime.utcfromtimestamp(time.time()))

输出:

datetime.datetime.utcfromtimestamp(time.time()) ==  2018-09-21 01:19:47.698207

striptime(date_string,format)

将格式字符串转换为datetime对象。语法格式如下:

datatime.datetime.strptime(data_string,format)

此语法中datatime.datetime指的是datatime.datetime类,data_string是指日期字符串,format为格式化方式。

返回一个datetime对象。示例如下:

#striptime()
t = datetime.datetime.now()
print('datetime.datetime.striptime() == ',datetime.datetime.strptime(str(t),'%Y-%m-%d %H:%M:%S.%f'))

输出:

datetime.datetime.striptime() ==  2018-09-21 09:28:27.960964

strftime(format)

将格式化字符串转换为datetime对象。语法格式如下:

datetime.datetime.strftime(format)

此语法中datatime.datetime指的是datatime.datetime类,format为格式化字符串。返回一个datetime对象。示例如下:

t = datetime.datetime.now()
print('datetime.datetime.strftime() == ',datetime.datetime.strftime(t,'%Y-%m-%d %H:%M:%S'))

输出:

datetime.datetime.strftime() ==  2018-09-21 09:32:43

strftime完整实例

#一个使用strfmat()的完整实例
#! /usr/bin/python
# -*- coding:UTF-8 -*-
dt = datetime.datetime.now()
print('当前时间',dt)
print('dt.strftime(\'%Y-%m-%d %H:%M:%S.%f\') ==',dt.strftime('%Y-%m-%d %H:%M:%S.%f'))
print('dt.strftime(\'%Y-%m-%d %I:%M:%S %p\') ==',dt.strftime('%Y-%m-%d %I:%M:%S %p'))
print('dt.strftime(\'%a\') == ',dt.strftime('%a'))
print('dt.strftime(\'%A\') == ',dt.strftime('%A'))
print('dt.strftime(\'%b\') == ',dt.strftime('%b'))
print('dt.strftime(\'%B\') == ',dt.strftime('%B'))
print('dt.strftime(\'%c\') == ',dt.strftime('%c'))
print('dt.strftime(\'%x\') == ',dt.strftime('%x'))
print('dt.strftime(\'%X\') == ',dt.strftime('%X'))
print('这是一周中的第%s天' % dt.strftime('%w'))
print('这是一年中的第%s天' % dt.strftime('%j'))
print('这是一年中的第%s个星期' % dt.strftime('%U'))

输出:

当前时间 2018-09-21 10:20:58.604170
dt.strftime('%Y-%m-%d %H:%M:%S.%f') == 2018-09-21 10:20:58.604170
dt.strftime('%Y-%m-%d %I:%M:%S %p') == 2018-09-21 10:20:58 AM
dt.strftime('%a') ==  Fri
dt.strftime('%A') ==  Friday
dt.strftime('%b') ==  Sep
dt.strftime('%B') ==  September
dt.strftime('%c') ==  Fri Sep 21 10:20:58 2018
dt.strftime('%x') ==  09/21/18
dt.strftime('%X') ==  10:20:58
这是一周中的第5天
这是一年中的第264天
这是一年中的第37个星期

日历模块

日历(Calender)模块的的函数都与日历有关,如输出某月的字符月历。星期一默认是每周的第一天,如果需要更改为星期天,则需要使用calendar.setfirstweekday()函数。内置函数如下:

calendar.calendar(year,w=2,l=1,c=6)

该函数返回一个指定年份的年历,year参数是必填的,其余3个参数是选填的,w,l,c分别用来指定每日宽度间隔,每星期行数,每月间隔距离。其中第3个字母是英文字母L的小写,即line的缩写。输出的年历中,3个月一行。

示例如下:

#calendar
import calendar
#w,l,c分别用来指定每日宽度间隔,每星期行数,每月间隔距离
#print(calendar.calendar(2018,w=1,l=1,c=1))
#不指定w,l,c的情况下,将使用默认设置
print(calendar.calendar(2018))

输出:

                                  2018

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7                1  2  3  4                1  2  3  4
 8  9 10 11 12 13 14       5  6  7  8  9 10 11       5  6  7  8  9 10 11
15 16 17 18 19 20 21      12 13 14 15 16 17 18      12 13 14 15 16 17 18
22 23 24 25 26 27 28      19 20 21 22 23 24 25      19 20 21 22 23 24 25
29 30 31                  26 27 28                  26 27 28 29 30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1          1  2  3  4  5  6                   1  2  3
 2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10
 9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17
16 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24
23 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30
30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5                      1  2
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       3  4  5  6  7  8  9
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      10 11 12 13 14 15 16
16 17 18 19 20 21 22      20 21 22 23 24 25 26      17 18 19 20 21 22 23
23 24 25 26 27 28 29      27 28 29 30 31            24 25 26 27 28 29 30
30 31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7                1  2  3  4                      1  2
 8  9 10 11 12 13 14       5  6  7  8  9 10 11       3  4  5  6  7  8  9
15 16 17 18 19 20 21      12 13 14 15 16 17 18      10 11 12 13 14 15 16
22 23 24 25 26 27 28      19 20 21 22 23 24 25      17 18 19 20 21 22 23
29 30 31                  26 27 28 29 30            24 25 26 27 28 29 30
                                                    31

calendar.firstweekday

返回每周以星期几开始。默认设置下,返回0,即星期一。示例如下:

print('calendar.firstweekday() == ',calendar.firstweekday())

输出:

calendar.firstweekday() ==  0

calendar.isleap(year)

如果是闰年就返回True,否则就返回False。示例如下:

print('calendar.isleap(2018) == ',calendar.isleap(2018))

输出:

calendar.isleap(2018) ==  False

calendar.leapday(y1,y2)

返回y1,y2两年之间的闰年总数。示例如下:

print('calendar.leapdays(2000,2018) == ',calendar.leapdays(2000,2018))

输出:

calendar.leapdays(2000,2018) ==  5

calendar.month(year,month,w=2,l=1)

返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度为2个字符,每行长度为7*w+6。1是每星期的行数。w,l为可选参数,如果没有设置,将使用默认值。示例如下:

print(calendar.month(2018,9,w=1,l=1))

输出如下:

   September 2018
Mo Tu We Th Fr Sa Su
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

calendar.monthcalendar(year,month)

返回一个整数的单层嵌套列表。每个子列表装在代表一个星期的整数。year年month外的日期都设为0;范围内的日期由该月第几日表示,从1开始。示例如下:

print(calendar.monthcalendar(2018,9))

输出:

[[0, 0, 0, 0, 0, 1, 2], [3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16], [17, 18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29, 30]]

calendar.monthrange(year,month)

返回两个整数。第一个是该月星期几的日期码,第二个是该月的日期码,日从0(星期一)到6(星期日),月从1到12。

print('calendar.monthrange(2018,9) == ',calendar.monthrange(2018,9))

输出:

calendar.monthrange(2018,9) ==  (5, 30)

calendar.setfirstweekday(weekday)

设置每周的起始日期,0(星期一)到6(星期日)。示例如下:

print('calendar.firstweekday == ',calendar.firstweekday())
calendar.setfirstweekday(6)
print('calendar.firstweekday == ',calendar.firstweekday())

输出:

calendar.firstweekday ==  0
calendar.firstweekday ==  6

牛刀小试——时间大杂烩

自定义函数,使用Time、Calendar和datetime模块获取当前日期前后N天和N月的日期

#牛刀小试——时间大杂烩
#!/usr/bin/python
#-*- coding:UTF-8 -*-

from time import strftime, localtime
from datetime import timedelta, date
import calendar

year = strftime("%Y", localtime())
mon  = strftime("%m", localtime())
day  = strftime("%d", localtime())
hour = strftime("%H", localtime())
min  = strftime("%M", localtime())
sec  = strftime("%S", localtime())

def today():
    '''''
    get today,date format="YYYY-MM-DD"
    '''''
    return date.today()

def todaystr():
    '''
    get date string, date format="YYYYMMDD"
    '''
    return year + mon + day

def datetime():
    '''''
    get datetime,format="YYYY-MM-DD HH:MM:SS"
    '''
    return strftime("%Y-%m-%d %H:%M:%S", localtime())

def datetimestr():
    '''''
    get datetime string
    date format="YYYYMMDDHHMMSS"
    '''
    return year + mon + day + hour + min + sec


def get_day_of_day(n=0):
    '''''
    if n>=0,date is larger than today
    if n<0,date is less than today
    date format = "YYYY-MM-DD"
    '''
    if n < 0:
        n = abs(n)
        return date.today()-timedelta(days=n)
    else:
        return date.today()+timedelta(days=n)

def get_days_of_month(year, mon):
    '''''
    get days of month
    '''
    return calendar.monthrange(year, mon)[1]

def get_firstday_of_month(year, mon):
    '''''
    get the first day of month
    date format = "YYYY-MM-DD"
    '''
    days = "01"
    if int(mon) < 10:
        mon = "0" + str(int(mon))
    arr = (year, mon, days)
    return "-".join("%s" %i for i in arr)

def get_lastday_of_month(year, mon):
    '''''
    get the last day of month
    date format = "YYYY-MM-DD"
    '''
    days=calendar.monthrange(year, mon)[1]
    mon = addzero(mon)
    arr = (year, mon, days)
    return "-".join("%s" %i for i in arr)

def get_firstday_month(n=0):
    '''''
    get the first day of month from today
    n is how many months
    '''
    (y, m, d) = getyearandmonth(n)
    d = "01"
    arr = (y, m, d)
    return "-".join("%s" %i for i in arr)


def get_lastday_month(n=0):
    '''''
    get the last day of month from today
    n is how many months
    '''
    return "-".join("%s" %i for i in getyearandmonth(n))

def getyearandmonth(n=0):
    '''''
    get the year,month,days from today
    befor or after n months
    '''
    thisyear = int(year)
    thismon = int(mon)
    totalmon = thismon + n
    if n >= 0:
        if totalmon <= 12:
            days = str(get_days_of_month(thisyear, totalmon))
            totalmon = addzero(totalmon)
            return year, totalmon, days
        else:
            i = totalmon//12
            j = totalmon%12
            if j == 0:
                i -= 1
                j = 12
            thisyear += i
            days = str(get_days_of_month(thisyear, j))
            j = addzero(j)
            return str(thisyear), str(j), days
    else:
        if totalmon > 0 and totalmon < 12:
            days = str(get_days_of_month(thisyear,totalmon))
            totalmon = addzero(totalmon)
            return year, totalmon, days
        else:
            i = totalmon//12
            j = totalmon%12
            if(j==0):
                i -= 1
                j = 12
            thisyear += i
            days = str(get_days_of_month(thisyear, j))
            j = addzero(j)
            return str(thisyear), str(j), days

def addzero(n):
    '''''
    add 0 before 0-9
    return 01-09
    '''
    nabs = abs(int(n))
    if nabs < 10:
        return "0" + str(nabs)
    else:
        return nabs

def get_today_month(n=0):
    '''''
    获取当前日期前后N月的日期
    if n>0, 获取当前日期前N月的日期
    if n<0, 获取当前日期后N月的日期
    date format = "YYYY-MM-DD"
    '''
    (y, m, d) = getyearandmonth(n)
    arr = (y, m, d)
    if int(day) < int(d):
        arr = (y, m, day)
    return "-".join("%s" %i for i in arr)

def get_firstday_month(n=0):
    (y, m, d) = getyearandmonth(n)
    arr = (y, m, '01')
    return "-".join("%s" %i for i in arr)

def main():
    print('today is:', today())
    print('today is:', todaystr())
    print('the date time is:', datetime())
    print('data time is:', datetimestr())
    print('2 days after today is:', get_day_of_day(2))
    print('2 days before today is:', get_day_of_day(-2))
    print('2 months after today is:', get_today_month(2))
    print('2 months before today is:', get_today_month(-2))
    print('2 months after this month is:', get_firstday_month(2))
    print('2 months before this month is:', get_firstday_month(-2))

if __name__=="__main__":
    main()

输出:

today is: 2018-09-21
today is: 20180921
the date time is: 2018-09-21 15:06:19
data time is: 20180921150619
2 days after today is: 2018-09-23
2 days before today is: 2018-09-19
2 months after today is: 2018-11-21
2 months before today is: 2018-07-21
2 months after this month is: 2018-11-01
2 months before this month is: 2018-07-01

习题

习题1:

输入一个字符(如:lastweek),输出上周一的日期和本周一的日期和时间,时间以0时0分0秒(如:2016-09-19 00:00:00 - 2016-09-26 00:00:00)

def getMonday():
    dt = datetime.datetime.today()
    now_day = dt.strftime('%w')
    chazhi = int(now_day) - 1
    monday = datetime.date.today() - datetime.timedelta(days=chazhi)
    print('本周一是:', monday.strftime('%Y-%m-%d %H:%M:%S'))
    lastweek = monday - datetime.timedelta(days=7)
    print('上周一是:', lastweek.strftime('%Y-%m-%d %H:%M:%S'))

getMonday()

输出:

本周一是: 2018-09-17 00:00:00
上周一是: 2018-09-10 00:00:00

习题2:

输入两个字符(如:past1day、per1hnour),输出从昨天凌晨0点到今天凌晨0点24小时内整点的时间戳。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • 那一年,儿子一岁,我三十三岁。 他刚开始学会走路,而我,已在人间走了三十二年。 也是这样春暖花开的季节,一切都欣欣...
    蓝柿阅读 779评论 18 23
  • 周五下了英语,我开始很焦虑。周六上午的课下午的班会要录的视频周末的学习班比赛作业线代考试。吃饭回了宿舍还要下去打水...
    黑夜不再来阅读 233评论 1 1
  • 锻炼着写文字,是因为从小没有写日记的习惯,人生的三分之一献给了画图和美剧。相反文字却能记录比相片更闪耀的时间点,比...
    nerd_kitchen阅读 209评论 0 0
  • 今天和C君外出踏青,没想到偶遇了一片意外的美景。
    小万管家阅读 223评论 0 0