datetime模块中定义了一个datetime类,datetime.datetiem.now()返回当前日期和时间,其类型是datetime。
1.1获取当前时间
>>> import datetime >>> now_time = datetime.datetime.now() >>> print(now_time) # 2017-01-03 14:52:06.901262 >>> datetime.datetime.now # <built-in method now of type object at 0x7f9035a42ec0> >>> type(datetime.datetime.now()) # <class ‘datetime.datetime‘>
>>> datetime.datetime.now()
# datetime.datetime(2017, 1, 3, 15, 16, 17, 149946)
参考上一小节构造一个时间而已
thetime = datetime.datetime(2017, 1, 3, 15, 16, 17, 149946)
在计算机中,时间实际上是用数字表示的。我们把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0
(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp。
时间戳和时区没有关系,都是UTC时间。时间戳一旦确定,则UTC时间就确定了
datetime类型的时间转换为timestamp,只需要调用timestamp()方法即可。
注意Python的timestamp是一个浮点数。如果有小数位,小数位表示毫秒数
>>> datetime.now().timestamp()
1483435168.053399
timestamp转换为datetime
使用datetime提供的fromtimestamp()方法
>>> datetime.now().timestamp() 1483435168.053399 >>> datetime.fromtimestamp(datetime.now().timestamp()) datetime.datetime(2017, 1, 3, 17, 21, 14, 288967)
>>> print(datetime.fromtimestamp(datetime.now().timestamp()))
2017-01-03 17:28:32.735594 # 输出为本地时间
>>> print(datetime.utcfromtimestamp(datetime.now().timestamp()))
2017-01-03 09:28:41.671879 # 直接输出UTC时间
注意到timestamp是一个浮点数,它没有时区的概念,而datetime是有时区的。上述转换是在timestamp和本地时间做转换。本地时间是指当前操作系统设定的时区。
有关时区 UTC时间等需要好好看下
很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()
实现,需要一个日期和时间的格式化字符串:
str格式的日期转换为datetime格式的
>>> from datetime import datetime >>> cday = datetime.strptime(‘2015-6-1 18:19:59‘, ‘%Y-%m-%d %H:%M:%S‘) >>> print(cday) # 这里具体如何对应需要看python的文档,输入的时间为字符串格式 2015-06-01 18:19:59
datetime转换为str格式
>>> print(datetime.now().strftime(‘%a, %b %d %H:%M‘)) Tue, Jan 03 17:47
对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用+
和-
运算符,不过需要导入timedelta
这个类:
>>> from datetime import datetime, timedelta >>> now = datetime.now() >>> now datetime.datetime(2015, 5, 18, 16, 57, 3, 540997) >>> now + timedelta(hours=10) datetime.datetime(2015, 5, 19, 2, 57, 3, 540997) >>> now - timedelta(days=1) datetime.datetime(2015, 5, 17, 16, 57, 3, 540997) >>> now + timedelta(days=2, hours=12) datetime.datetime(2015, 5, 21, 4, 57, 3, 540997)
本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间,而UTC时间指UTC+0:00时区的时间。
datetime
表示的时间需要时区信息才能确定一个特定的时间,否则只能视为本地时间。
如果要存储datetime
,最佳方法是将其转换为timestamp再存储,因为timestamp的值与时区完全无关。
mark
原文:http://www.cnblogs.com/lvxiaobo616/p/6246148.html