一、时间概念

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. 手机端1px细线公共类

    手机端1px细线公共类 .borderBottom1px{ position: relative; } .borderBottom1px:after{ content: ""; p ...

  2. 手写ArrayList、LinkedList

    ArrayList package com.hjp.labs; import org.omg.CORBA.PRIVATE_MEMBER; /* 一.ArrayList的底层是Object类的数组,默认 ...

  3. hdu6206 Apple

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6206 题目: Apple Time Limit: 1000/1000 MS (Java/Oth ...

  4. ACM-ICPC 2018 焦作赛区网络预赛 E. Jiu Yuan Wants to Eat (树链剖分-线性变换线段树)

    树链剖分若不会的话可自行学习一下. 前两种操作是线性变换,模\(2^{64}\)可将线段树全部用unsigned long long 保存,另其自然溢出. 而取反操作比较不能直接处理,因为其模\(2^ ...

  5. Python学习笔记之函数参数传递 传值还是传引用

      在学完Python函数那一章节时,很自然的的就会想到Python中函数传参时传值呢?还是传引用?或者都不是? 在回答上面的问题之前我们先来看看下面的代码: 代码1: def foo(var): v ...

  6. mybatis v jpa

    mybatis的优势在于SQL的自由度上,SQL优化和返回对象的大小都是可控的.spring-data-JPA则在开发效率上有优势.

  7. Web服务器对比介绍

    1.Apache Apache是非常强大的老牌Web服务器,具有模块化结构,拥有众多非常成熟稳定的模块,目前仍是使用非常广泛的服务器,但它是基于多进程HTTPServer,需要对每个用户请求创建一个子 ...

  8. 20145322《Java程序设计》第2次实验报告

    20145322<Java程序设计>第2次实验报告 实验步骤与内容 一.实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4. ...

  9. 20135320赵瀚青LINUX第三章读书笔记

    第三章 进程管理 3.1 进程 进程的定义: 是处于执行期的程序以及它所包含的资源的总称. 线程的定义: 是在进程中活动的对象. 每个线程都拥有一个独立的程序计数器.进程栈和一组进程寄存器. 内核调度 ...

  10. Hive常见问题

    1.HQL是否区分大小写 不区分 hive> select AGE from default.studeNT; --不区分大小写,即使是表中字段 2.查看创建表过程 show create ta ...