1.获取当前时间
from datetime import datetime
第一个datetime是标准库的名字;
第二个datetime是该标准库内类的名字;
now是datetime类具有的函数,返回当前时间;
查看这个数据类型,是datetime.datetime类。
2.构造时间
datetime标准库包含datetime类;
利用该类构造对象时,可以传入参数:年月日时分秒;
秒可以不写,默认为0;
个位数不要补零,否则会报错;
创建对象时,会对各个参数的大小的合法性进行校验:
3.datetime转化成timestamp时间戳
在计算机中,时间是以数字表示的,规定把1970年1月1日00:00:00 UTC+00:00规定为epoch time;
epoch time在计算机中时间存储为0;
1970年以前的时间timestamp记为负数;
当前时间就是相对与epoch time的秒数;
timestamp=0=1970-01-01 00:00:00 UTC+00:00
对应的北京时间是:timestamp=0=1970-01-01 08:00:00 UTC+08:00
timestamp一旦确定,那么所有的UTC时间(不同时区的时间)都可以确定;
全球各地计算机在任意时刻的timestamp是完全相同的。
python中datetime转化成timestamp的方法:
python中时间戳是一个浮点数,小数部分表示毫秒数;
Java和JavaScript中毫秒数也是用整数表示,这种情况只需要除以1000就可以和python格式相同。
4.timestamp转化成datetime
将timestamp作为参数传入datetime.fromtimestamp()函数,返回即datetime
注意,时间戳不区分时区,但是转化后的datetime是分时区的;
datetime.fromtimestamp(ts)是将时间戳转化为本地时间;
datetime.utcfromtimestamp()是将时间戳转化为utc标准时区的时间,格林威治,与北京相差8小时。
5.str转化成datetime
使用datetime.strptime()函数;
需要传入带转化的字符串作为第一个参数;
需要传入日期时间的格式化字符串:'%Y-%m-%d %H:%M:%S'
6.datetime转化成str
将datetime格式转化成字符串格式,使用函数strftime();
datetime对象.strftime('格式化字符串')
%a 表示星期几,英文缩写;
%b 表示月份
python中日期时间的格式规定见官方文档:
https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
7.datetime加减
日期时间的加减运算表示将datetime往前或者往后推算,得到新的datetime;
导入timedelta类,用加减运算符;
now-timedelta(days=2)表示日期往前推两天。
8.本地时间转换成UTC时间
本地时间是指系统设定的时区的时间;
北京时间是utc+8:00时区的时间;
utc时间是指utc+0:00时区的时间。
datetime类有一个时区属性tzinfo,默认为none,所以不能区分这个datetime的时区;
可以强行给datetime设定一个时区。
8.时区转换
获取UTC时间,并设置时区为UTC0:00
将UTC时间转换成北京时间:
使用astimezone函数
时区转换的关键在于:
拿到一个datetime首先要获知其正确的时区,然后强制设置时区,作为基准时间;
利用带时区的datetime,通过astimezone(),可以转换到任意时区。
datetime表示的时间需要时区信息才能确定特定的时间,没有时区信息默认为本地时间
如果要存储datetime,最佳方法是将其转换成timestamp再存储,因为timestamp与时区无关