如何在Python中获取当前时间?
什么是用于获得当前时间的模块/方法?
>>> import datetime >>> datetime.datetime.now() datetime(2009, 1, 6, 15, 8, 24, 78915)
而只是时间:
>>> datetime.datetime.time(datetime.datetime.now()) datetime.time(15, 8, 24, 78915)
相同但略微更紧凑:
>>> datetime.datetime.now().time()
有关更多信息,请参阅文档 。
为了保存input,可以从datetime
模块导入datetime
对象:
>>> from datetime import datetime
然后删除前导datetime.
从以上所有。
你可以使用time.strftime()
:
>>> from time import gmtime, strftime >>> strftime("%Y-%m-%d %H:%M:%S", gmtime()) '2009-01-05 22:14:39'
与Harley的答案类似,但是使用str()
函数来得到一个快速的,非常脏的,更容易读取的格式:
>>> from datetime import datetime >>> str(datetime.now()) '2011-05-03 17:45:35.177000'
>>> from datetime import datetime >>> datetime.now().strftime('%Y-%m-%d %H:%M:%S')
对于这个例子,输出将是这样的: '2013-09-18 11:16:32'
strftime
的格式是:
https://docs.python.org/3/library/time.html#time.strftime
我如何获得Python中的当前时间?
time
模块
time
模块提供的function可以告诉我们在“纪元以来的秒数”以及其他实用程序中的时间。
import time
Unix纪元时间
这是您应该获取时间戳以保存在数据库中的格式。 这是一个简单的浮点数,可以转换为整数。 对于算术运算也是很好的,因为它表示从1970年1月1日00:00:00开始的秒数,相对于我们接下来要查看的其他时间表示,
>>> time.time() 1424233311.771502
这个时间戳不占用闰秒,所以它不是线性的 – 闰秒被忽略。 所以虽然不等同于国际UTC标准,但是相当接近,因此在大多数logging保存的情况下是相当好的。
然而,这对于人力调度来说并不理想。 如果您希望在某个时间点发生未来事件,则需要将时间存储为可以parsing为date时间对象或序列化date时间对象的string(这些将在后面介绍)。
time.ctime
您也可以按照您的操作系统首选的方式来表示当前时间(这意味着当您更改系统首选项时,它可能会发生变化,因此不要依赖于此在所有系统中都是标准的,正如我所看到的其他系统所期望的那样) 。 这通常是用户友好的,但通常不会导致可以按时间顺序sorting的string:
>>> time.ctime() 'Tue Feb 17 23:21:56 2015'
您也可以使用ctime
将时间戳保存为可读的forms:
>>> time.ctime(1424233311.771502) 'Tue Feb 17 23:21:51 2015'
这种转换也不利于保存logging(除了只能被人类parsing的文本以外 – 还有改进的光学字符识别和人工智能,我认为这些案例的数量将会减less)。
datetime
模块
datetime
模块在这里也非常有用:
>>> import datetime
datetime.datetime.now
datetime.now
是返回当前时间的类方法。 它使用time.localtime
没有时区信息(如果没有给出,否则请参阅下面的时区)。 它有一个在shell上回显的表示(它可以让你重新创build一个等价的对象),但是在打印(或强制到str
)时,它是以人类可读的(接近ISO)格式,而字典sorting等同于时间顺序:
>>> datetime.datetime.now() datetime.datetime(2015, 2, 17, 23, 43, 49, 94252) >>> print(datetime.datetime.now()) 2015-02-17 23:43:51.782461
date时间的utcnow
通过这样做,您可以使用UTC时间(全球标准)获取date时间对象:
>>> datetime.datetime.utcnow() datetime.datetime(2015, 2, 18, 4, 53, 28, 394163) >>> print(datetime.datetime.utcnow()) 2015-02-18 04:53:31.783988
UTC是一个几乎相当于GMT时区的时间标准。 (虽然格林尼治标准时间(UTC)和夏令时(UTC)在夏令时不变,但用户可能会在夏季切换到其他时区,如英国夏令时(British Summer Time))。
知道date时间的时区
但是,迄今为止我们创build的任何date时间对象都可以很容易地转换为不同的时区。 我们可以用pytz
模块解决这个问题:
>>> import pytz >>> then = datetime.datetime.now(pytz.utc) >>> then datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)
等同的是,在Python 3中,我们有一个带有utc timezone
实例的timezone
类,这也使得对象时区可以被pytz
(但是转换到另一个时区而没有方便的pytz
模块作为练习读者):
>>> datetime.datetime.now(datetime.timezone.utc) datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)
我们看到我们可以很容易地从原始的utc对象转换到时区。
>>> print(then) 2015-02-18 04:55:58.753949+00:00 >>> print(then.astimezone(pytz.timezone('US/Eastern'))) 2015-02-17 23:55:58.753949-05:00
你也可以使用pytz
时区localize
方法来pytz
一个天真的date时间对象,或者通过replacetzinfo属性( replace
,这样做是盲目的),但是这些是比最佳实践更多的最后的手段:
>>> pytz.utc.localize(datetime.datetime.utcnow()) datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>) >>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc) datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)
pytz
模块允许我们使datetime
对象能够pytz
时区,并将时间转换为pytz
模块中可用的数百个时区。
一个人可以表面上将这个对象序列化为UTC时间并将其存储在数据库中,但是这需要更多的内存,并且比简单地存储我首先演示的Unix Epoch时间更容易出错。
查看时间的其他方式更容易出错,特别是在处理可能来自不同时区的数据时。 你希望在这里不要混淆string或序列化date时间对象的时区。
如果你用Python为用户显示时间, ctime
可以很好地工作,而不是在表格中(通常sorting不好),但也许在一个时钟中。 不过,我个人build议,在Python中处理时间时,要么使用Unix时间,要么使用时区知道的UTC datetime
对象。
做
from time import time t = time()
-
t
– 浮点数,有利于时间间隔测量。
Unix和Windows平台有一些区别。
>>> from time import gmtime, strftime >>> strftime("%a, %d %b %Y %X +0000", gmtime()) 'Tue, 06 Jan 2009 04:54:56 +0000'
以指定的格式输出当前的GMT。 还有一个localtime()方法。
这个页面有更多的细节。
为什么不把事情简单化呢?
>>> from datetime import datetime >>> datetime.now().strftime("%Y-%m-%d %H:%M:%S") '2016-07-27 15:56:59' >>>
所有好的build议,但我觉得使用ctime()
我最简单:
In [2]: from time import ctime In [3]: ctime() Out[3]: 'Thu Oct 31 11:40:53 2013'
这给出了当前本地时间的格式良好的string表示。
如果您需要当前时间作为time
对象:
>>> import datetime >>> now = datetime.datetime.now() >>> datetime.time(now.hour, now.minute, now.second) datetime.time(11, 23, 44)
最快的方法是
>>> import time >>> time.strftime("%Y%m%d") '20130924'
我会为此做出贡献,因为.isoformat()
在文档中,但还没有在这里(这是类似于@ Ray Vega的答案):
>>>import datetime >>> datetime.datetime.now().isoformat() '2013-06-24T20:35:55.982000'
为什么不问美国海军的官方计时员美国海军天文台 ?
import requests from lxml import html page = requests.get('http://tycho.usno.navy.mil/cgi-bin/timer.pl') tree = html.fromstring(page.content) print(tree.xpath('//html//body//h3//pre/text()')[1])
如果你住在华盛顿特区(像我一样)的延迟可能不会太糟糕…
这就是我最终的结果:
>>>from time import strftime >>>strftime("%m/%d/%Y %H:%M") 01/09/2015 13:11
另外,这个表格是select合适的格式代码来获取date格式的必要参考(从Python的“datetime”文档在这里 )。
datetime.now()
将当前时间作为表示本地时区中的时间的朴素date时间对象返回。 该值可能不明确,例如,在DST转换期间(“回退”)。 为了避免歧义,UTC时区应该被使用:
from datetime import datetime utc_time = datetime.utcnow() print(utc_time) # -> 2014-12-22 22:48:59.916417
或者附带相应时区信息的时区感知对象(Python 3.2+):
from datetime import datetime, timezone now = datetime.now(timezone.utc).astimezone() print(now) # -> 2014-12-23 01:49:25.837541+03:00
您可以使用时间模块。
import time print time.strftime("%d/%m/%Y") >>> 06/02/2015
Y
的使用给了整整一年,使用y
会给06/02/15
你也可以用更长的时间。
time.strftime("%a, %d %b %Y %H:%M:%S") >>> 'Fri, 06 Feb 2015 17:45:09'
import datetime date_time = datetime.datetime.now() date = date_time.date() # gives date time = date_time.time() # gives time print date.year, date.month, date.day print time.hour, time.minute, time.second, time.microsecond
做dir(date)
或任何variables包括包,你可以得到所有与variables相关的属性和方法。
>>> import datetime, time >>> time = strftime("%H:%M:%S:%MS", time.localtime()) >>> print time '00:20:58:20S'
尝试从http://crsmithdev.com/arrow/的箭头模块;
import arrow arrow.now()
或者utc版本
arrow.utcnow()
改变它的输出添加.format()
arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')
为特定的时区?
arrow.now('US/Pacific')
一小时前
arrow.utcnow().replace(hours=-1)
或者如果你想的要点。
arrow.get('2013-05-11T21:23:58.970460+00:00').humanize() >>> '2 years ago'
利用pandas获取当前时间,过度杀死手头的问题。
import pandas as pd print (pd.datetime.now()) print (pd.datetime.now().date()) print (pd.datetime.now().year) print (pd.datetime.now().month) print (pd.datetime.now().day) print (pd.datetime.now().hour) print (pd.datetime.now().minute) print (pd.datetime.now().second) print (pd.datetime.now().microsecond)
输出:
2017-09-22 12:44:56.092642 2017-09-22 2017 9 22 12 44 56 92693
简单和容易:
使用datatime
,
import datetime print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
输出:
2017-10-17 23:48:55
要么
利用time
,
import time print(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))
输出:
2017-10-17 18:22:26
这是我用来得到时间,而不必格式化,有些人不喜欢拆分方法,但它在这里是有用的:
from time import ctime print ctime().split()[3]
将以HH:MM:SS格式打印
我是一个简单的人,我想要毫秒的时间。 简单的方法让他们:
import time, datetime print(datetime.datetime.now().time()) # 11:20:08.272239 # or in a more complicated way print(datetime.datetime.now().time().isoformat()) # 11:20:08.272239 print(datetime.datetime.now().time().strftime('%H:%M:%S.%f')) # 11:20:08.272239 # but do not use this print(time.strftime("%H:%M:%S.%f", time.localtime()), str) # 11:20:08.%f
但我只需要几毫秒 ,对吧? 最短的方法来获得他们:
import time time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000) # 11:34:23.751
添加或删除最后一个乘法的零以调整小数点的数量,或者只是:
def get_time_str(decimal_points=3): return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)
import datetime date_time = str(datetime.datetime.now()) date = date_time.split()[0] time = date_time.split()[1]
date将打印date和时间将打印时间。
如果你已经使用numpy,那么你可以直接使用numpy.datetime64()函数。
import numpy as np str(np.datetime64('now'))
仅限date:
str(np.datetime64('today'))
或者,如果您已经使用pandas,那么您可以使用pandas.to_datetime()函数
import pandas as pd str(pd.to_datetime('now'))
要么,
str(pd.to_datetime('today'))