03.05时间管理第五章

目录

  • 使用场景
  • 常用时间模块
    • time 对象
    • 结构化时间与时间戳的转换
  • datetime 格式字符表
  • datetime模块的应用
  • 案例: 时间转换器
  • 项目 51备忘录v0.35
    • KV编程论:

@(日期时间 相关模块的使用)

使用场景

  • 文件属性
  • 数据库
  • 页面UI显示
  • 日志
  • 时间戳(timestamp)
    • 协调世界时UTC , 原子钟定义时间
    • 时间戳指的是Unix时间戳, 定义为从格林威治时间1970年01月01日 00:00:00 起至今的总秒数
    • 格林威治时间 GMT

UTC 协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的
世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。‘‘

东八区 : -> UTC + 8
西十区 : -> UTC - 10

代码中的时间

  • 时间戳timestamp : 1473525444 1525404023
  • 时间字符串Format String : 2015-02-14 10:25:00
  • 结构化的时间struct_timeyear=2018, month=5, day=1, hour=16, min=37, sec=6

常用时间模块

  • time 用于获取时钟时间, 处理器运行时间耗时, 时间差
  • datetime 支持算术, 比较和时区配置
  • python-dateutil(pip install)

常用时间模块处理各种时间换算问题

常见操作

  • 时间的各种表达格式类型
  • 各种加减运算

常用方法 time.time() 以及 time.sleep()

time 对象

可以用 time(hour, min, sec, us)产生一个 time对象

import time
time.

time. + Tab按键查看函数可用的方法, time.time + Shift + Tab按键查看函数方法的用法

time.time()
1549953921.6927984
time.time() # 以秒为单位返回纪元以来的当前时间
1549953424.2878275

计算时间差, 获得秒数 示例

start = time.time()
print(start)
1539932049.6301212
end = time.time() # 计算时间差, 单位秒
print(f'过了{end - start} 秒')
过了54.78131175041199 秒
start = time.time()
# 执行各种操作, (倒数计时)
for i in range(10):
    print(i)

end = time.time()

print(f'过了 {end - start} 秒')
0
1
2
3
4
5
6
7
8
9
过了 0.0 秒

时间休眠

time.sleep?
for i in range(6):
    print(i)
for i in range(6):
    time.sleep(2)
    print(i)
0
1
2
3
4
5

结构化时间与时间戳的转换

time.localtime()

# http://devdocs.io/python~3.6/library/time#time.strftime
time.struct_time(tm_year=2019, tm_mon=2, tm_mday=13, tm_hour=15, tm_min=16, tm_sec=9, tm_wday=2, tm_yday=44, tm_isdst=0)
time.localtime(1339932049)
time.struct_time(tm_year=2012, tm_mon=6, tm_mday=17, tm_hour=19, tm_min=20, tm_sec=49, tm_wday=6, tm_yday=169, tm_isdst=0)
Index Attribute Values
0 tm_year (for example, 1993)
1 tm_mon range [1, 12]
2 tm_mday range [1, 31]
3 tm_hour range [0, 23]
4 tm_min range [0, 59]
5 tm_sec range [0, 61]; see (2) in strftime() description
6 tm_wday range [0, 6], Monday is 0
7 tm_yday range [1, 366]
8 tm_isdst 0, 1 or -1; see below
N/A tm_zone abbreviation of timezone name
N/A tm_gmtoff offset east of UTC in seconds
time.mktime?
time.mktime(time.localtime())
1549977290.0
## 结构化时间与字符串格式的转换
## 时间的字符串格式化:http://devdocs.io/python~3.6/library/time#time.strftime
time.strftime?

datetime 格式字符表

字符 含义
%Y 完整的年份
%m 月份,[01,12]
%d 日期,[01,31]
%H 小时,[00,23]
%M 分钟,[00,59]
%S 秒钟,[00,61] (大概是有闰秒的存在)
%z Time zone offset from UTC.
%a 星期英文缩写
%A 星期英文
%b 月份英文缩写
%B 月份英文
%c 本地相应的日期和时间表示
%I 小时,[01,12]
%p AM 和 PM
%X 本地相应时间

上面是时间, 下面是日期

字符 含义
%w 一星期的第几天,[0(sun),6]
%j 一年的第几天,[001,366]
%U 一年中的第几个星期,星期日为第一天,[00,53]
%W 一年中的第几个星期,星期一为第一天,[00,53]
%y 没有世纪的年份
%x 本地相应日期
## 结构化时间与字符串格式的转换
## 时间的字符串格式化
time.strftime("%Y-%m-%d %X", time.localtime())
'2019-02-12 21:24:28'

上面为当前时间(年-月-日 时:分:秒)的表达式,并以字符串格式化形式输出

time.strptime('2018-05-06 22:52:40', "%Y-%m-%d %X")
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=6, tm_hour=22, tm_min=52, tm_sec=40, tm_wday=6, tm_yday=126, tm_isdst=-1)

time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

格式化字符串表示时间

strftime% -> 1999-12-12, 把代码里面的时间对象转成人类认识的字符串,f:format

strptime: 2000-12-12 -> object,把人类认识的字符串,转成代码里面的对象,p,parse

datetime模块的应用

http://devdocs.io/python~3.6/library/datetime

https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

import datetime
datetime.date.
from datetime import datetime
datetime.now()
datetime.datetime(2019, 2, 12, 21, 34, 3, 759331)

‘{dt:%Y-%m-%d}‘.format(dt=datetime.now())

注意引用的位置 (曾经使用的字符串格式化输出的类型)

'{dt:%Y-%m-%d}'.format(dt=datetime.now())
'2019-02-12'
f'{datetime.now():%Y-%m-%d}' # python 3.x常见写法
'2019-02-12'
from datetime import date
d = date(2035, 8, 8)
print(d)
2035-08-08
date.today()
datetime.date(2019, 2, 12)
print(date.today())
2019-02-12
from datetime import time
t = time(12, 4)
print(t)
12:04:00
# 时间的各种计算
from datetime import timedelta
d = timedelta(days=2)  # 根据参数, 生成多少间隔周期的一个时间间隔对象
print(d)
2 days, 0:00:00
d =timedelta(hours=1)
print(d)
1:00:00
d = timedelta(days=6, hours=2)
print(d)
6 days, 2:00:00
today = date.today()
print(today)
2019-02-12
future = today + d
print(future)
2019-02-18
today = date.today()
print(type(today))
print(today.day)
print(today.month)
<class 'datetime.date'>
12
2
count = future - today
print(count)
type(count)
6 days, 0:00:00

datetime.timedelta

从时间戳生成datetime

import time
t = time.time()
print(t)
1549981583.6009007
from datetime import datetime
datetime.utcfromtimestamp(t)
datetime.datetime(2019, 2, 12, 14, 26, 23, 600901)

格式化字符串表示时间

strftime% -> 1999-12-12, 把代码里面的时间对象转成人类认识的字符串,f:format

strptime: 2000-12-12 -> object,把人类认识的字符串,转成代码里面的对象,p: parse(解析)

日期的不同输出方式

dt = datetime(2088, 8, 8, 8, 8)
print(dt)
2088-08-08 08:08:00
dt.strftime('%Y/%m%d %X')
'2088/0808 08:08:00'
dt.strftime('%A %B %Y')
'Sunday August 2088'
datetime.strptime('Sunday August 2088', '%A %B %Y') 
datetime.datetime(2088, 8, 1, 0, 0)
datetime.strptime('2088-08-08 08:08:00', '%Y-%m-%d %X') 
datetime.datetime(2088, 8, 8, 8, 8)
datetime.strptime('2088/08/08 08:08:00', '%Y/%m/%d %X')
datetime.datetime(2088, 8, 8, 8, 8)

dateutil更好的控制日期

# pip install python-dateutil
# https://dateutil.readthedocs.io/en/stable/examples.html#relativedelta-examples
# timedelta不够用, 处理跨星期,跨月,跨年的计算麻烦
# class datetime.timedelta(days=0, seconds=0, microseconds=0,
# milliseconds=0, minutes=0, hours=0, weeks=0)
# 下周的星期三是几号
from datetime import datetime
from dateutil.relativedelta import relativedelta
from dateutil.rrule import * # MO,TU,WE,TH,FR
d = datetime.now()
print(d)
2019-02-19 21:24:27.763399

计算 从 d开始的下个礼拜的星期三是几号

print(d + relativedelta(weekday=WE))
2019-02-13 23:30:24.795729

计算从d开始的上一个礼拜的星期三是几号

print(d + relativedelta(weekday=WE, weeks=-1))
2019-02-06 23:30:24.795729

需求: 计算一个月, 三个月是哪天.

from datetime import date
date(2019,1,30) + relativedelta(months=+1)
datetime.date(2019, 2, 28)
date(2019,1,30) + relativedelta(months=+3)
datetime.date(2019, 4, 30)
date(2019,1,30) + relativedelta(months=-4)
datetime.date(2018, 9, 30)
date(2019,1,30) + relativedelta(years=-32)
datetime.date(1987, 1, 30)

案例: 时间转换器

给定随意的几种时间形式, 自动转成统一的格式

举例:

‘‘2018/1/8 14:28‘, 4.7, ‘2018年2月8日 14:28‘ 都能自动转成 2018-01-08 14:28:00, 没有时间的自动添加当前时间

注意返回值,区分datetime类型str类型

from datetime import datetime
from dateutil import parser
d1 = '2019/1/8 14:28'
date1 = datetime.strptime(d1, '%Y/%m/%d %H:%M') # TODO 字符串转内置时间格式
print(type(date1))
print(date1)
date_str = date1.strftime('%Y-%m-%d %X')
print(type(date_str), date_str)  # isinstance 方法
<class 'datetime.datetime'>
2019-01-08 14:28:00
<class 'str'> 2019-01-08 14:28:00

使用parser快速搞定格式化输出

数字形式 年-月-日 小时:分钟:秒

d1 = '2019/1/23 14:28'

# d1 = '2019年2月8日 14:28'

date1 = parser.parse(d1)
print(type(date1))
print(date1)
<class 'datetime.datetime'>
2019-01-23 14:28:00
d2 = '2019/1/22'
date2 = parser.parse(d2)
print(date2)
2019-01-22 00:00:00

中文形式 年-月-日 小时:分钟:秒

d1 = '2019年1月29日 14:28'
d1.replace('年', '/').replace('月', '/').replace('日', '')
'2019/1/29 14:28'

输入的日期格式转为/获得格式的字符串

只有日期, 没有时间

s = '1.6'
now = datetime.now()
my_time = now.replace(day=6, month=1)  # 根据现有年月日复制缺少部分
# print(now, my_time)
my_time.strftime('%Y-%m-%d %X')
'2019-01-06 11:08:14'

封装函数

def change_datetime(dt):
    """将输入格式转成 yyyy-mm-dd hh:mm:ss"""
    date1 = parser.parse(dt)
#     date_str = date1.strftime()
    date_str = date1.strftime('%Y-%m-%d %X')
    print(type(date_str), date_str)  # isinstance 方法
    return date1, date_str
dt, dt_str = change_datetime('2014/3/20 2:10')
<class 'str'> 2014-03-20 02:10:00
dt_str
'2014-03-20 02:10:00'
def change_datetime_cn(dt):
    # 中文格式的日期
    date1 = dt.replace('年', '/').replace('月', '/').replace('日', '')
    return change_datetime(date1)  #  函数嵌套
change_datetime_cn('2019年1月2日')
<class 'str'> 2019-01-02 00:00:00

(datetime.datetime(2019, 1, 2, 0, 0), '2019-01-02 00:00:00')
dt_str
'2014-03-20 02:10:00'

1.1格式的日期

def change_datetime_num(dt):
    """处理纯数字格式的日期 并自动添加时间"""
    month, day = dt.split('.')
    now = datetime.now()
    my_time = now.replace(day=int(day), month=int(month))
    print(now, my_time)
    return now, my_time.strftime('%Y-%m-%d %X')
change_datetime_num('2.6')  # 确保输入为字符串
2019-02-13 00:21:17.112677 2019-02-06 00:21:17.112677

(datetime.datetime(2019, 2, 13, 0, 21, 17, 112677), '2019-02-06 00:21:17')
# 抽象成类, TODO: 完善上面的函数,并添加你需要的任何格式转换
class TimeMaster:
    def __init__(self, fmt='%Y-%m-%d %X'):
        self._output_format = fmt
    def change_datetime_num(self, dt):
        """转换'1.5'这种月日格式的日期,并添加时间"""
        month, day = dt.split('.')
        now = datetime.now()
        # my_time = now.replace(day=day, month=month)
        my_time = now.replace(day=int(day), month=int(month))
        print(now, my_time)
        return now, my_time.strftime(self._output_format)
    def set_format(self, new_fmt):
        self._output_format = new_fmt

项目 51备忘录v0.35

  • 添加功能:根据输入内容,自动完成日期时间的添加
  • 复习从第一行代码到写成类的整个过程

KV编程论:

  • 只是一个思考框架,处理只是记忆的各种关联。
    • 项目:拆解
    • 数据:增删改查
    • 程序:输入,计算,输出
    • 函数:某一段功能代码
    • 类:对现实事物的抽象
    • 对象:类的实例
# 默认是今天
data = {
'time': '',
'thing': ''
}
def add_memo(item):
    """默认添加今天日期"""
    now = datetime.now().strftime('%Y-%m-%d %H:%M')
    print(now)
    data['time'] = now
    data['thing'] = item
    return data
add_memo("饿了")
2019-02-13 00:26

{'time': '2019-02-13 00:26', 'thing': '饿了'}

指定日期

  • 明天提醒我去趟公司
  • 下个月6号去买2斤玉米
s = '明天提醒我去趟公司'
s.find('明天')  # 日期的中文关键词
0
from dateutil.relativedelta import relativedelta
if s.find('明天') > -1:
#     now = datetime.now()
#     print(now)
#     print(now + relativedelta(days=1)) # TODO
    print((now + relativedelta(days=1)).strftime('%Y-%m-%d %H:%M'))
2019-02-13 23:57
ss = '下个月5号去大栅栏买2斤花生米'
if ss.find('下个月') > -1:
#     now = datetime.now()
#     print(now)
#     print(now + relativedelta(months=1, day=5)) # TODO
    print((now + relativedelta(months=1, day=5)).strftime('%Y-%m-%d %H:%M'))
2019-03-05 23:57

原文地址:https://www.cnblogs.com/lataku/p/10428633.html

时间: 2024-11-11 11:00:44

03.05时间管理第五章的相关文章

【时间管理】总结情况,思考做法

由于前段时间在述职答辩过程中,经理和其他领导都提出要注意时间的管理,昨晚制定了打算阅读有关时间管理的五本书籍.第一本是:<尽管去做,无压力的艺术> 对于为什么选择这本书,主要是由于网上推荐的人比较多.其中第一章主要讲述了面对的新问题.新情况如何用新的思路去解决. 现在归纳如下: 1. 关注价值观,因为它阐明意义,指导方向,集中精力对付主要的成果和价值. 2. 任何造成反应过度或者不足的事情都应该暂定缓缓,及时调整自己的状态. 3. 注重在心中给自己许诺下的承诺,任何没有找到应有位置和恰当存在方

PMP备考_第六章_项目时间管理

项目时间管理 前言 项目时间管理是项目管理中最难的一个环节,与个人时间管理类似,团体的效率如果管理不当,是低于个人效率的,为了管理好时间,从预估,执行到反馈均需要严格的分析和处理.如果制定的计划是无法执行,完全无法作为依据的计划,那么项目执行会进行死亡行军状态,注定是一个失败的项目. 整个项目的时间管理部分同样占据了两个过程组,一个是规划过程组,一个是监控过程组. 时间管理部分包括以下几个部分 规划时间进度管理   制定进度管理计划 定义活动                  识别完成项目所必须

Testlink1.9.17使用方法(第五章 测试用例管理)

第五章 测试用例管理 QQ交流群:585499566 TestLink支持的测试用例的管理包含二层:分别为新建测试用例集(Test Suites).创建测试用例(Test Cases).可以把测试用例集对应到项目的功能模块,测试用例则对应着具体的功能. 我们可以使用测试用例搜索功能从不同的项目.成百上千的测试用例中查到我们需要的测试用例,并且还提供移动和复制测试用例的功能,可以将一个测试用例移动或复制到别的项目里,勾上自动更新树选项,添加.删除或编辑测试用例后更新树会被自动更新. 一. 创建测试

2017.2.28 activiti实战--第五章--用户与组及部署管理(二)部署流程资源

学习资料:<Activiti实战> 第五章 用户与组及部署管理(二)部署流程资源 内容概览:讲解流程资源的读取与部署. 5.2 部署流程资源 5.2.1 流程资源 流程资源常用的有以下几种: 1 流程定义文件:拓展名为bpmn20.xml和bpmn 2 流程定义的图片:拓展名为PNG 3 表单文件:拓展名为form 4 规则文件:拓展名为drl 部署流程资源的时候,要注意一点: 引擎会根据不同的拓展名进行不同的处理.bpmn或bpmn20.xml类型的文件,会在ACT_RU_PROCDEF(流

2017.2.20 《activiti实战第五章--用户与组及部署管理》(一)用户与组

学习资料:<Activiti实战> 第五章 用户与组及部署管理(一)用户与组 内容概览:讲解activiti中内置的一套用户.组的关系,以及如何通过API添加.删除.查询. 5.1 用户与组 5.1.1 用户 1 public class IdentityServiceTest{ 2 @Rule 3 public ActivitiRule ar = new ActivitiRule();//使用默认的acitiviti.cfg.xml作为参数 4 5 @Test 6 public void t

第十五章 系统虚拟机管理

第十五章  系统虚拟机管理 下载虚拟机  lftp 172.25.254.250 ls cd  pub/iso/ get rhel-server-7.1-x86_64-dvd.iso 安装 ************************virt-install********************* #!/bin/bash virt-install \                        /*建立虚拟机 -name $1 \                          /*虚

第二章、linux的时间管理

第二章.linux的时间管理 linux系统一般存在两个时间,一个属于linux操作系统的系统时间,系统时间受操作系统影响,可能会出现时间不准确,但另一个真实硬件上的时间,也就是用纽扣电子持续供电的硬件时间,误差是非常小的. 一.如何查看两种不同的时间 查看系统时间: date 例子: [[email protected] ~]# date Thu Jan 21 12:44:21 CST 2016 查看硬件时间: hwclock 或 clock 例子: [[email protected] ~]

“全栈2019”Java多线程第三十五章:如何获取线程被等待的时间?

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第三十五章:如何获取线程被等待的时间? 下一章 "全栈2019"Java多线程第三十六章:如何设置线程的等待截止时间 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&qu

五项管理 (目标管理,行动管理,心态管理,时间管理,学习管理)小册子总结

一.目标管理 有目标者自有千计万计,无目标者只感千难万难 目标不明确,努力再多也是劳而无功 方向不对,努力白费 做对的事情,比把事情做对还重要 人之所以伟大,是因为目标而伟大 世界上没有懒惰的人,只有没有目标的人,没有目标就没有动力 没有目标的航船,所有的风就是逆风 完成你该做的事情,才能做你想做的事情 利润是检验企业成功的唯一标准 有5%的目标,有要付出100%的努力 猎人眼里应该只有奔跑的兔子,而不是其他的什么东西 目标聚集原则,目标要单一,专注 万人操弓,只射一招,招无不中.——吕氏春秋