一、时间概念

1.1 时间戳

  时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总

  秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。

1.2 时区

  为了时间各国的时间能统一,使用了时区的概念。以格林尼治为0时区,总24个时区。 东+,西-

1.3 夏令时

  为了节约夏天的能源,开发出来的一个调节时间。 然后实际证明没什么软用。 中国以前也用过,但是取消掉了。

二、python代码中的时间

  时间有三种格式:

      时间戳(timestamp)

      时间字符串(Format String)

      结构化的时间(struct_time):(year=2018, month=5, day=1, hour=16, min=37, sec=6)

  python中的时间模块

      time

      datetime

      python-dateutil (pip install)  

2.1 time 模块

  常用方法:

    time.time()   当前的时间戳

    time.sleep()   停止多少时间

2.1.1 时间戳 与 结构化时间 之间相互转换

import time
print(time.localtime()) # 无参数的时候,表示取当前时间
print(time.localtime(0)) # 0时间戳,在中国是 70年8点
print(time.mktime(time.localtime()))

2.1.2 结构化时间 与 格式化字符串时间 相互转换

一、  strftime : tuple -> 字符串时间

  strftime(format[, tuple]) -> string

两个参数:

    format:我们定义的格式

    tuple为可选参数,不写的时候,使用当前的时间。

  format的字符:

%Y Year with century as a decimal number.
%m Month as a decimal number [01,12].
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%M Minute as a decimal number [00,59].
%S Second as a decimal number [00,61].
%z Time zone offset from UTC.
%a Locale's abbreviated weekday name.
%A Locale's full weekday name.
%b Locale's abbreviated month name.
%B Locale's full month name.
%c Locale's appropriate date and time representation.
%I Hour (12-hour clock) as a decimal number [01,12].
%p Locale's equivalent of either AM or PM.
>>> time.strftime('%Y-%m-%d %X', time.localtime()) '2018-06-24 13:14:35'

二 、 字符串时间 到 结构化时间转换

    strptime(string, format) -> struct_time

    把一个时间的字符串,按照格式进行转化

time.strptime('2018-05-06 22:52:40', "%Y-%m-%d %X")

2.1.3 结构化时间和时间戳 到 固定字符串时间的转换

  字符串时间的格式固定

# 结构化时间 到 固定字符串时间
>>> time.asctime()
'Sun Jun 24 13:40:09 2018'
>>> time.asctime(time.localtime(0))
'Thu Jan 1 08:00:00 1970' # 时间戳 到 固定字符串时间
>>> time.ctime()
'Sun Jun 24 13:40:39 2018'
>>> time.ctime(0)
'Thu Jan 1 08:00:00 1970'

2.2 datetime 模块

datetime包含的模块如何:

  date 日期模块 包含年 月 日

  time 时间模块 包含时 分 秒 微秒

  datetime 日期时间模块 包含了时间全部东西

  timedelta 日期计算模块

2.2.1 date模块

  只包含日期

a = datetime.date(2018, 11, 11) # 生成一个date对象
print(a.year, a.month, a.day)
from datetime import date
date.today()
print(a.today())
a.year
a.mouth
a.day

2.2.2 time模块

  只包含时间

a = datetime.time(12, 23, 24, 12) # 生成一个时间对象,包含了时分秒
print(a)
a.hour
a.minute
a.second
print(a.microsecond)

2.2.3 datetime模块

  包含日期与时间

# datetime类

a = datetime.datetime.now() # 获取当前时间的datetime类
b = datetime.datetime(2018, 2, 19, 12, 15) # 自己生成一个datetime对象 # 字符串格式化,使用Y m d等提取datetime对象中相对应的参数
c = '{dt:%Y-%m-%d %H}'.format(dt=datetime.datetime.now())
c = f'{datetime.datetime.now():%Y-%m-%d}'
print(c)

时间戳 转 datatime对象

# 时间戳 转 datime对象
import time
from datetime import datetime
a = time.time()
print('a', datetime.utcfromtimestamp(0))
print('a', datetime.utcfromtimestamp(a))
datetime 与 字符串时间之间的转换

格式化字符串表示时间

# 格式化字符串表示时间
# strftime: % -> 1999-12-12, 把代码里面的时间对象转成人类认识的字符串,f:format
# strptime: 2000-12-12 -> object,把人类认识的字符串,转成代码里面的对象,p,parse
dt = datetime(2018,12,12,12,12)
print(dt.strftime('%Y-%m-%d %X'))
print(dt.strftime('%A %B %Y')) f = dt.strptime('2018-12-12 12:12:00', '%Y-%m-%d %X') # 生成一个新的dt对象
fb = dt.strptime('Wednesday December 2018', '%A %B %Y')
print(fb, type(fb))

2.2.4 timedelta 计算模块

# 时间的计算
from datetime import timedelta
from datetime import date
a = timedelta(days=1)
# timedelta(hours=12)
today = date.today()
future = today + a*10
print(future, type(future)) c = future - today
print(c, type(c))

2.3 relativedelta 时间间隔模块

在处理跨年,跨天,跨月等情况下,没法使用。 timedelta不是很好用。
from datetime import datetime
from dateutil.relativedelta import relativedelta
from dateutil.rrule import * # 表示星期号 MO,TU.WE,TH.FR d = datetime.now()
print(d) # 最近的星期三
# 下一周的星期三
# 上一周的星期三
print(d + relativedelta(weekday=WE))
print(d + relativedelta(weekday=WE, weeks=+1))
print(d + relativedelta(weekday=WE, weeks=-1)) # 间隔多少天,多少月的某一天
from datetime import date
print('下月的今天',date(2018, 1, 30) + relativedelta(months=+1))
print(date(218,2,27) + relativedelta(days=10))
# days = 10 是相差10天
# day = 10 是这个月第10天

案列

案例1: 2B闹钟

掌握的技术
1.简单的控制台驻留技术
2.subprocess操作系统接口
import sys
import time
import random
import subprocess def alert():
set_time = input('设置时间08:00') print(f'闹钟设置为{set_time}')
print('现在的时间是')
run = True while run:
t = time.localtime()
fmt = "%H:%M:%S"
now = time.strftime(fmt, t)
# print(now)
print(now + '\r', end='', flush=True)
# \r 是光标还在当前行
# flush 刷新
sys.stdout.write(now + '\r')
sys.stdout.flush()
time.sleep(1)
if now[:5] == set_time.ljust(5, '0'):
subprocess.Popen(['start', '上学歌.mp3'], shell=True)
run = not random_match()
# if random_match():
# break def random_match():
"""
时间控制模块
:return: 答对为True,错误Flase
"""
try:
a = random.randint(0,10)
b = random.randint(0,10)
answer = int(input(f'请输入 {a}+{b} 结果:'))
if answer == a + b:
return True
else:
return False
except Exception as e:
print(e) def main():
alert()
# print(random_match()) if __name__ == '__main__':
main()

案列2 : 时间转换包

  • 基础储备

from datetime import datetime
from dateutil import parser
'''
时间的返回格式
datetime打印出来也类似字符串
两种格式类似
'''
d1 = '2018/1/2 13:00'
dt = datetime.strptime(d1, '%Y/%m/%d %H:%M')
print(dt, type(dt))
print(dt.strftime('%Y-%m-%d %X')) '''
使用parse一键转换格式,不再傻傻的拼凑格式
多种字符串类型 转化为 datetime
'''
d1 = '2018-1 8 13:28'
# d1 = '2018年1月8号 13点28分' # 无法识别中文
date2 = parser.parse(d1)
print('parse转换:', date2, type(date2)) # 直接是datetime对象 # 解决中文无法识别的问题 使用替换
d2 = '2018年1月8日 13:28'
d3 = d2.replace('年', '/').replace('月', '/').replace('日', '')
print(d3) '''
替换时间
比如只给了 1.6、 如何拼凑出完整的时间
使用datetime的replace方法
'''
s = '1.6'
now = datetime.now()
my_time = now.replace(month=1,day=6)
print(my_time, type(my_time))
my_time.strftime('%Y-%m-%d %x')
  • 转化为函数

from datetime import datetime
from dateutil import parser def change_datetime(dt):
"""转换日期时间格式到yyyy-mm-dd hh:mm:ss"""
date1 = parser.parse(dt)
return date1, date1.strftime('%Y-%m-%d %X') def change_date_cn(dt: str):
"""转换中文格式的时间。比如'2019年8月9日 12:23'''"""
date1 = dt.replace('年', '/').replace('月', '/').replace('日', '')
return change_datetime(date1) def change_datetime_num(dt):
"""转换'1.5'这种月日格式的时间,并添加当前的时间"""
month, day = dt.split('.')
now = datetime.now()
my_time = now.replace(day=int(day), month=int(month))
return my_time, my_time.strftime('%Y-%m-%d %X') def main():
# dt = '2018 1 1 12:34'
# dt_time, str_time = change_datetime(dt) # 使用元祖来接受
# print(dt_time,type(dt_time))
# print(str_time,type(str_time))
# dt = '2019年8月9日 12:23'
dt = '1.6'
dt_time, dt_str =change_datetime_num(dt)
print(dt_time,type(dt_time))
print(dt_str,type(dt_str)) if __name__ == '__main__':
main()

抽象成类


class TimeMaster:
"""时间转换大师"""
def __init__(self, fmt='%Y-%m-%d %x'):
"""定义初始化函数"""
self.__out_fmt = fmt def change_datetime(self, dt):
"""转换英文格式日期时间格式到yyyy-mm-dd hh:mm:ss"""
date1 = parser.parse(dt)
return date1, date1.strftime(self.__out_fmt) def change_date_cn(self, dt: str):
"""转换中文格式的时间。比如'2019年8月9日 12:23'''"""
date1 = dt.replace('年', '/').replace('月', '/').replace('日', '')
return change_datetime(date1) def change_datetime_num(self, dt):
"""转换'1.5'这种月日格式的时间,并添加当前的时间"""
month, day = dt.split('.')
now = datetime.now()
my_time = now.replace(day=int(day), month=int(month))
return my_time, my_time.strftime(self.__out_fmt) def set_fmt(self, new_fmt):
"""更改字符串的输出格式"""
self.__out_fmt = new_fmt def main():
t = TimeMaster()
dt = '2018 1 1 12:34'
dt = '2019年8月9日 12:23'
dt = '1.6'
dt_time, str_time = t.change_datetime_num(dt)
print(dt_time,type(dt_time))
print(str_time,type(str_time)) if __name__ == '__main__':
main()

时间处理模块time的更多相关文章

  1. python模块:时间处理模块

    http://blog.csdn.net/pipisorry/article/details/53067168 常用python自带时间处理模块 python自带的时间处理模块参考[操作系统服务:ti ...

  2. 【转】Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))

    Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历)) 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog. ...

  3. 【转】Python之日期与时间处理模块(date和datetime)

    [转]Python之日期与时间处理模块(date和datetime) 本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常 ...

  4. Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))

    Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历)) 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog. ...

  5. c++时间计算模块

    c++时间计算模块 可用于计算代码运行耗时.计算代码运行时间线(比如处理与运行时间相关函数). 该模块从实际项目中产生,使用方式仁者见仁智者见智,设计思想可供参考. 源码: //author: cai ...

  6. Python 日期时间处理模块学习笔记

    来自:标点符的<Python 日期时间处理模块学习笔记> Python的时间处理模块在日常的使用中用的不是非常的多,但是使用的时候基本上都是要查资料,还是有些麻烦的,梳理下,便于以后方便的 ...

  7. python时间-time模块

    time是python自带的模块,用于处理时间问题,提供了一系列的操作时间的函数. 以下说明针对于 python2.7,其他版本可能有所差异. 模块提供了两个种表示时间的格式: 1.时间戳,是以秒表示 ...

  8. Python之日期与时间处理模块(date和datetime)

    本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容输出 计算某个功能的执行时 ...

  9. python 时间time模块介绍和应用

    1.其中format_string 类型的时间和struct_time之间可以转换,timestamp时间戳可以和struct_time之间进行转化,但是时间戳和格式化时间是不能直接转换的. time ...

随机推荐

  1. Linux 磁盘

    一台物理服务器通常有好几块磁盘(/dev/sda,/dev/sdb),每个磁盘上都可以进行分区(例如对sda进行分区操作:fdisk /dev/sda,可以将sda分成sda1,sda2,sda5等分 ...

  2. 适配移动端的在图片上生成水波纹demo

      <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&q ...

  3. iOS开发之CoreData数据存储

    iOS开发之CoreData数据存储 参考资料:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreD ...

  4. 服务器抓包命令:tcpdump详解

    官网地址:http://www.tcpdump.org/tcpdump_man.html 简介: tcpdump,就是:dump the traffic on a network,根据使用者的定义对网 ...

  5. vux在ISO中异常 this.$vux.confirm.show

    在按钮事件中调用this.$vux.confirm.show,并且启用按钮的show-loading属性 安卓正常,ios中弹窗无法显示 经过排查,iso中设置按钮的loading后,要用异步setT ...

  6. java线程方面的知识

    java中单继承,多实现的: 若为多继承,那么当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清,因此用了单继承. 为什么是多实现呢? 通过实现接口拓展了类的功能,若实现的多个接口中有重复的 ...

  7. Web前端学习笔记之jQuery基础

    0x0 jQuery介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Aja ...

  8. 简单的dos命令

    cd ..   进入上一层目录cd /..   进入当前盘所有根目录d:  进入d盘dir  查看下一级目录d:>d:\abc.txt 新建一个文档hostname   主机名SET 查看环境变 ...

  9. git-修改远程的URL

    git remote set-url命令修改remote URL git remote set-url传递两个参数 remote name.例如,origin或者upstream new remote ...

  10. Windows下才有blat进行命令行邮件发送

    1.先下载blat.exe文件,下载地址: https://sourceforge.net/projects/blat/files/ 2.解压后只需要blat.exe即可,进入此文件夹,运行如下脚本进 ...