一、时间概念

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. Thread was being aborted.

    异常:Thread was being aborted.(正在终止线程) 网上很多人说Response.redirect或Response.write()放在了try catch块中引起 百度一下就可 ...

  2. TOSCA自动化测试工具--Log defect

    1.执行完用例后,对于失败的用例进行分析,如果有缺陷,可以提对应的缺陷 2.在issues模块, 右键创建自己需要的文件夹,然后在文件夹上右键找到虫子图形点下,就可以创建缺陷了,填上对应的内容 3.如 ...

  3. NC开发笔记指导

    修改端口 InvocationInfoProxy.getInstance().get().getUserCode(); 前台 Nchome F:\JAVA\Projects\ERPEHROA\ufid ...

  4. 乐观锁的一种实现方式——CAS

    在java里面,synchronized关键字就是一种悲观锁,因为在加上锁之后,只有当前线程可以操作变量,其他线程只有等待. CAS操作是一种乐观锁,它假设数据不会产生冲突,而是在提交的时候再进行版本 ...

  5. iOS “弱账号” 暗转 “强账号”

    一.背景 由于某些历史原因,我们产品中50%以上活跃用户是弱账户.即 客户端按照某种规则生成的一个伪id 存在keychain 里,作为这个用户的唯一标识,实现快速登录.正常情况下是不会有问题. 最近 ...

  6. linux下多线程之pthread_detach(pthread_self())

    写个碰到的问题,记录下自己的技术之路点滴pthread_detach(pthread_self())linux线程执行和windows不同,pthread有两种状态joinable状态和unjoina ...

  7. HDFS数据块

    磁盘也是由数据块组成的,一般默认大小是512字节,构建磁盘之上的文件系统一般是磁盘块的整数倍.         HDFS也是采用块管理的,但是比较大,在Hadoop1.x中默认大小是64M,Hadoo ...

  8. MongoDB使用中的一些问题

    1.count统计结果错误 这是由于分布式集群正在迁移数据,它导致count结果值错误,需要使用aggregate pipeline来得到正确统计结果,例如: db.collection.aggreg ...

  9. JS正则表达式从入门到入土(3)—— 范围类

    范围类 在使用正则表达式时,很多时候,我们会想要匹配a~z的所有字母,很多人想到,可以使用字符类[abcdefg...z],但是,这种方法需要输入所有需要匹配的字母.那么,有没有简单点的方法呢? 所幸 ...

  10. [原创] css中的绝对定位和相对定位

    我对博客的认识是:记录问题,解决问题,分享知识.如果有轮子,我不需要造轮子.   首先,定位无论是相对定位还是绝对定位,必须有一个参考项,而这个参考项,专业术语称之为 包含块,这里的包含块是指在定位时 ...