项目中用到一个需求
开始的我傻傻分不清楚, 闲言少絮,开始正题
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_time
if __name__ == '__main__':
birthday = OhhoRandom.get_birthday()
print(birthday) # 2008-10-18
we
- nihao
- rr
- rrr
双方的
sdfsdfsdfsdf
sdfsdf
sdf
dfsdfsdf
sdfsd
- 有序列表
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 time
t1 = time.time()
time.sleep(3)
t2 = time.time()
print(t2 - t1) # 3.0001702308654785
from datetime import datetime
t3 = 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:25
string_date = datetime.strptime("2017-12-22", "%Y-%m-%d")
print(string_date)#2017-12-22 00:00:00
string_date = datetime.strptime("19:16:25", "%H:%M:%S")
print(string_date) # 1900-01-01 19:16:25