如何在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”文档在这里 )。

strftime格式的代码表

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'))