python time datetime 使用

来源:互联网 发布:厦大网络教学平台登录 编辑:程序博客网 时间:2024/06/03 10:47

项目中用到一个需求

开始的我傻傻分不清楚, 闲言少絮,开始正题
1 业务需求,需要随机获得 十年间隔内任意一天 人的生日
在python sqlalchemy 中birthday是 date格式(2017-12-14)
在python中怎么实现呢?
现在还没有优化的的代码是这样的:

     @staticmethod     def get_birthday():        date1 = (2007, 1, 1, 0, 0, 0, -1, -1, -1)        time1 = mktime(date1)        date2 = (2017, 1, 1, 0, 0, 0, -1, -1, -1)        time2 = mktime(date2)        random_time = random.uniform(time1, time2)  # uniform返回随机实数 time1 <= time < time2        random_time = date.fromtimestamp(random_time)        return random_timeif __name__ == '__main__':        birthday = OhhoRandom.get_birthday()    print(birthday) # 2008-10-18

we

  • nihao
    • rr
    • rrr

双方的

sdfsdfsdfsdf
sdfsdf

sdf

dfsdfsdf    sdfsd

  1. 有序列表

dd

datetime

datetime 是Python 处理日期和时间的标准库
要将datetime 拆开看 date 和 time
2015-04-19 12:20:00 这样就是日期时间类型 2015-04-19是日期(年月日) 12:20:00 时间(时分秒)

这里首先要清楚一个概念,模块,类

>>> from datetime import datetime>>> datetime.now()datetime.datetime(2017, 12, 15, 16, 26, 6, 981321)>>> type(datetime.now())<type 'datetime.datetime'>

注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。

如果仅导入import datetime,则必须引用全名datetime.datetime。

datetime.now()返回当前日期和时间,其类型是datetime

datetime 类也有自己的时间戳, time模块中也有
现在看下datetime 模块中有哪些类,类中又有哪些方法和属性
最好的学习方法是学习官网
https://docs.python.org/3/library/datetime.html#available-types


datetime 中包含的类:

  • datetime.datetime
  • datetiem.date
  • datetime.time
  • datetime.timezone
  • datetiem.tzinfo
  • datetime.delta

datetime.datetime 类

datetime 类 包含了来自于 datetime.date datetime.time 类的所有信息

# datetime 中的方法>>> datetime.now().year # 获取当年的年份 year是属性2017>>> datetime.now() # 当前本地的时间相当于localtime时间datetime.datetime(2017, 12, 15, 16, 58, 13, 767337)>>> datetime.utcnow() # 获取utc的时间和本地实际不一样datetime.datetime(2017, 12, 15, 8, 58, 32, 79397)>>> datetime.today()datetime.datetime(2017, 12, 15, 17, 4, 44, 815862)

datetime 类型的属性 有year,month, day, hour, minute,second, microsecond, tzinfo,fold

microsecond 微妙

tzinfo 时区信息对象

fold

毫秒怎么表示呢?

datetime.timestamp 时间戳

import timet1 = time.time()time.sleep(3)t2 = time.time()print(t2 - t1) # 3.0001702308654785from datetime import datetimet3 = datetime.now().timestamp()time.sleep(3)t4 = datetime.now().timestamp()print(t4 - t3) # 3.0004689693450928>>> datetime.now().timestamp()1513938240.282642>>> time.time()1513938521.50536

说明:
time 是以float 为基础的,小数点后面是 毫秒数,整数部分是秒 Java 中不一样Java中是毫秒

关于时间戳

时间戳和时区没有关系,使用本地时间
当前时间的时间戳和utc 下的时间的时间戳

print(datetime.now().timestamp())print(datetime.now())print(datetime.utcnow().timestamp())print(datetime.utcnow())#1513940607.905186#2017-12-22 19:03:27.905186#1513911807.905186#2017-12-22 11:03:27.905186

python 中日期转字符串和 字符串转日期

日期转字符串

now_datetime = datetime.now()now_string = now_datetime.strftime("%Y-%m-%d %H:%M:%S")print(now_string)#2017-12-22 19:16:25

字符串 转日期

string_date = datetime.strptime("2017-12-22 19:16:25", "%Y-%m-%d %H:%M:%S")print(string_date)  #2017-12-22 19:16:25string_date = datetime.strptime("2017-12-22", "%Y-%m-%d")print(string_date)#2017-12-22 00:00:00string_date = datetime.strptime("19:16:25", "%H:%M:%S")print(string_date) # 1900-01-01 19:16:25

离现在之前的时间

date