Python3.5从0开始学读书笔记——第十章 日期和时间

时间戳和日期

时间戳

通常,时间戳(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元组。如下表:

序号属性字段
0tm_year4位数字如2018
1tm_mon1-12
2tm_mday1-31
3tm_hour小时0-23
4tm_min分钟0-59
5tm_sec0-61(60或61是润秒)
6tm_wday一周的第几日0-6(0是周一)
7tm_yday一年中的第几日1-366
8tm_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)
三种时间格式转换

1537428586457

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小时内整点的时间戳。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值