提问



获取当前时间的模块/方法是什么?

最佳参考


使用:


>>> import datetime
>>> datetime.datetime.now()
datetime(2009, 1, 6, 15, 8, 24, 78915)

>>> print(datetime.datetime.now())
2018-07-29 09:17:13.812189


而且只是时间:


>>> datetime.datetime.time(datetime.datetime.now())
datetime.time(15, 8, 24, 78915)

>>> print(datetime.datetime.time(datetime.datetime.now()))
09:17:51.914526


相同,但稍微紧凑:


>>> datetime.datetime.now().time()


有关详细信息,请参阅文档[112]


要保存输入,可以从datetime模块导入datetime对象:


>>> from datetime import datetime


然后从上述所有内容中删除前导datetime.

其它参考1


你可以用time.strftime():[113]


>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'

其它参考2


类似于Harley的回答,但是使用str()函数来获得一种快速,肮脏,稍微更人性化的格式:


>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'

其它参考3


>>> from datetime import datetime
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S')


对于此示例,输出将如下所示:'2013-09-18 11:16:32'


这是strftime列表。[115]

其它参考4



  

如何在Python中获取当前时间?




time模块



time模块提供的功能告诉我们自纪元以来的秒数以及其他实用程序的时间。


import time


Unix纪元时间



这是您应该获取用于保存数据库的时间戳的格式。它是一个简单的浮点数,可以转换为整数。它也适用于几秒钟的算术运算,因为它代表自1970年1月1日00:00:00以来的秒数,并且它是相对于我们将在下一个时间看的其他时间表示的记忆灯:


>>> time.time()
1424233311.771502


这个时间戳不考虑闰秒,因此它不是线性的 - 闰秒被忽略。因此虽然它不等同于国际UTC标准,但它很接近,因此对于大多数记录保存来说非常好。


然而,这对于人类调度来说并不理想。如果您希望在某个特定时间点发生未来事件,那么您将希望使用可以解析为日期时间对象或序列化日期时间对象的字符串存储该时间(这些将在后面描述)。


time.ctime



您还可以按照操作系统首选的方式表示当前时间(这意味着它可以在您更改系统首选项时更改,因此不要依赖于此在所有系统中都是标准的,因为我已经看到其他人期望) 。这通常是用户友好的,但通常不会导致字符串按时间顺序排序:


>>> time.ctime()
'Tue Feb 17 23:21:56 2015'


您可以使用ctime将时间戳水合成人类可读的形式:


>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'


这种转换也不利于记录保存(除了只能由人类解析的文本 - 并且通过改进的光学字符识别和人工智能,我认为这些情况的数量将减少)。


datetime模块



datetime模块在这里也很有用:


>>> import datetime


datetime.datetime.now



datetime.now是一个返回当前时间的类方法。它使用没有时区信息的time.localtime(如果没有给出,否则请参见下面的时区)。它有一个表示(允许你重新创建一个等效的对象)在shell上回显,但是当打印(或强制转换为str)时,它是人类可读的(几乎是ISO)格式,并且是字典的sort等价于按时间顺序排序:


>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461


datetimes utcnow



您可以通过以下方式获取UTC时间的日期时间对象(全球标准):


>>> 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时区的时间标准。 (虽然GMT和UTC不会因夏令时而改变,但他们的用户可能会在暑假期间切换到其他时区,例如英国夏令时。)


发布日期时间时区



但是,到目前为止我们创建的日期时间对象都不能轻易转换为各种时区。我们可以使用pytz模块解决这个问题:


>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)


同样地,在Python 3中,我们有timezone类附加了一个utc timezone实例,这也使得对象时区可以识别(但是转换到另一个没有方便的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 timezone localize方法识别天真的日期时间对象,或者替换tzinfo属性(使用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模块中可用的数百个时区。


人们可以表面上将此对象序列化为UTC时间并将 存储在数据库中,但它需要更多的内存并且比仅仅存储Unix Epoch时间更容易出错,我首先证明了这一点。


查看时间的其他方式更容易出错,尤其是在处理可能来自不同时区的数据时。您希望不存在关于字符串或序列化日期时间对象所针对的时区的混淆。


如果你用Python为用户显示时间,ctime可以很好地工作,而不是在表格中(它通常不能很好地排序),但可能在时钟中。但是,我个人建议,在Python处理时间时,要么使用Unix时间,要么使用时区感知UTC datetime对象。

其它参考5





from time import time

t = time()



  • t - 浮点数,适用于时间间隔测量。



Unix和Windows平台有一些区别。

其它参考6


>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'


以指定的格式输出当前的GMT。还有一个localtime()方法。


此页面有更多详细信息。[116]

其它参考7


所有好的建议,但我发现自己最容易使用ctime():


In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'


这给出了当前本地时间的格式良好的字符串表示。

其它参考8


如果您需要当前时间作为time对象:


>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)

其它参考9


最快的方法是


>>> import time
>>> time.strftime("%Y%m%d")
'20130924'

其它参考10


简单易行:


使用datetime模块,


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

其它参考11


.isoformat()在文档中,但尚未在此处
(这与@Ray Vega的答案相似):


>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'

其它参考12


为什么不问美国海军的官方计时器美国海军天文台?[117]


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


如果你住在D.C.地区(像我一样),延迟可能不会太糟糕......

其它参考13


这就是我最终的目的:


>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11


此外,此表是选择适当的格式代码以获得按照您希望的方式格式化日期的必要参考(此处来自Pythondatetime文档)。[118]




其它参考14


您可以使用time模块。


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'

其它参考15


import datetime
date_time = datetime.datetime.now()

date = date_time.date()  # Gives the date
time = date_time.time()  # Gives the time

print date.year, date.month, date.day
print time.hour, time.minute, time.second, time.microsecond


dir(date)或包括包的任何变量。您可以获得与变量关联的所有属性和方法。

其它参考16


datetime.now()将当前时间作为一个天真的日期时间对象返回,该对象表示本地时区的时间。例如,在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

其它参考17


使用熊猫来获取当前时间,过度杀死手头的问题:[119]


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

其它参考18


尝试http://crsmithdev.com/arrow/:[120]中的箭头模块


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'

其它参考19


我想用毫秒来得到时间。获得它们的简单方法:


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)

其它参考20


>>> import datetime, time
>>> time = strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:20:58:20S'

其它参考21


默认情况下,now()函数以YYYY-MM-DD HH:MM:SS:MS格式返回输出。使用以下示例脚本在Python脚本中获取当前日期和时间,并在屏幕上打印结果。使用以下内容创建文件getDateTime1.py


import datetime

currentDT = datetime.datetime.now()
print (str(currentDT))


输出如下所示:


2018-03-01 17:03:46.759624

其它参考22


以下是我用来获取时间而不必格式化的内容。有些人不喜欢拆分方法,但它在这里很有用:


from time import ctime
print ctime().split()[3]


它将以HH:MM:SS格式打印。

其它参考23


from time import ctime

// Day {Mon,Tue,..}
print ctime().split()[0]
// Month {Jan, Feb,..}
print ctime().split()[1]
// Date {1,2,..}
print ctime().split()[2]
// HH:MM:SS
print ctime().split()[3]
// Year {2018,..}
print ctime().split()[4]


当您调用ctime()时,它会将秒转换为字符串,格式为Day Month Date HH:MM:SS Year(例如:Wed January 17 16:53:22 2018),然后调用split()方法将从你的字符串[[Wed,Jan,17,16:56:45,2018]]制作一个列表(默认的分隔符是空格)。


括号用于在列表中选择想要的参数。


一个人应该只调用一个代码行。一个人不应该像我一样打电话给他们,这只是一个例子,因为在某些情况下你会得到不同的价值观,罕见但不是不可能的情况。

其它参考24


如果你已经使用NumPy然后直接你可以使用numpy.datetime64()
功能。


import numpy as np
str(np.datetime64('now'))


仅限日期:


str(np.datetime64('today'))


或者,如果您已经使用Pandas,那么您可以使用pandas.to_datetime()函数:


import pandas as pd
str(pd.to_datetime('now'))


要么:


str(pd.to_datetime('today'))

其它参考25


import datetime
date_time = str(datetime.datetime.now())
date = date_time.split()[0]
time = date_time.split()[1]


日期将打印日期和时间将打印时间。

其它参考26


首先从datetime导入datetime模块


from datetime import datetime


然后将当前时间打印为yyyy-mm-dd hh:mm:ss


print(str(datetime.now())


要获得hh:mm:ss形式的时间,其中ss代表完整的秒数加上经过的秒数,只需这样做;


print(str(datetime.now()[11:])


将datetime.now()转换为字符串会产生一种答案,其格式与我们习惯的常规日期和时间一样。

其它参考27


如果您只想要以ms为单位的当前时间戳(例如,测量执行时间),您还可以使用timeit模块:


import timeit
start_time = timeit.default_timer()
do_stuff_you_want_to_measure()
end_time = timeit.default_timer()
print("Elapsed time: {}".format(end_time - start_time))

其它参考28


您可以使用此功能来获取时间(不幸的是它不会说AM或PM):


def gettime():
        from datetime import datetime
        return ((str(datetime.now())).split(' ')[1]).split('.')[0]


要获得稍后合并的小时,分​​钟,秒和毫秒,您可以使用以下功能:


小时的


def gethour():
        from datetime import datetime
        return return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[0]


分:


def getminute():
        from datetime import datetime
        return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[1]


第二的


def getsecond():
        from datetime import datetime
        return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[2]


毫秒:


def getmillisecond():
        from datetime import datetime
        return return (str(datetime.now())).split('.')[1]

其它参考29


因为还没有人提到它,这是我最近遇到的...一个pytz时区的fromutc()方法结合datetime的'utcnow()是我发现获得有用的当前时间的最好方法(和日期)在任何时区。


from datetime import datetime

import pytz


JST = pytz.timezone("Asia/Tokyo")


local_time = JST.fromutc(datetime.utcnow())


如果你想要的只是时间,你可以用local_time.time()得到它。