如何在Python中获取当前时间

时间:2009-01-06 04:54:24

标签: python datetime time

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

44 个答案:

答案 0 :(得分:2500)

使用:

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

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

就在时间:

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

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

有关详细信息,请参阅the documentation

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

>>> from datetime import datetime

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

答案 1 :(得分:864)

您可以使用time.strftime()

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

答案 2 :(得分:471)

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

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

以下是strftime directives

的列表

答案 3 :(得分:436)

Harley's answer类似,但使用str()函数获取快速,更易读的格式:

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

答案 4 :(得分:287)

  

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

time模块

time模块提供的函数告诉我们自纪元以来#34;秒内的时间。以及其他公用事业。

import time

Unix纪元时间

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

>>> time.time()
1424233311.771502

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

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

time.ctime

您还可以按照操作系统首选的方式表示当前时间(这意味着您可以在更改系统偏好设置时进行更改,因此不要依赖于此在所有系统中都是标准的,因为我和# 39;见过别人的期待)。这通常是用户友好的,但通常不会导致字符串按时间顺序排序:

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

datetime' s 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不会因夏令时而改变,但他们的用户可能会在暑假期间切换到其他时区,例如英国夏令时。)

datetime timezone aware

但是,到目前为止我们创建的日期时间对象都不能轻易转换为各种时区。我们可以使用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时区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 :(得分:119)

待办事项

from time import time

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

Unix和Windows平台存在一些差异。

答案 6 :(得分:87)

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

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

page有更多详情。

答案 7 :(得分:53)

所有好建议,但我发现自己最简单地使用ctime()

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

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

答案 8 :(得分:40)

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

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

答案 9 :(得分:38)

最快的方式是

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

答案 10 :(得分:30)

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

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

答案 11 :(得分:28)

为什么不问美国海军的官方计时员U.S. Naval Observatory

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.区域(像我一样),延迟可能不会太糟糕......

答案 12 :(得分:20)

使用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

答案 13 :(得分:19)

这就是我最终的目的:

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

此外,此表是选择适当的格式代码以获得按照您希望的方式格式化日期的必要参考(来自Python“datetime”文档here)。

strftime format code table

答案 14 :(得分:15)

dir(date)

执行{{1}}或包括包的任何变量。您可以获得与变量关联的所有属性和方法。

答案 15 :(得分:14)

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

答案 16 :(得分:12)

您可以使用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'

答案 17 :(得分:12)

尝试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'

答案 18 :(得分:12)

如果你已经使用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'))

答案 19 :(得分:12)

默认情况下,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

答案 20 :(得分:11)

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

答案 21 :(得分:11)

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

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)

答案 22 :(得分:10)

这个问题并不需要仅仅为它提供一个新的答案...但是,一个闪亮的新玩具/模块就足够了。就是Pendulum library,它似乎可以完成箭头所尝试的工作,但没有固有的缺陷和错误困扰着箭头。

例如,原始问题的答案:

>>> import pendulum
>>> print(pendulum.now())
2018-08-14T05:29:28.315802+10:00
>>> print(pendulum.utcnow())
2018-08-13T19:29:35.051023+00:00

有很多需要解决的标准,包括多个RFC和ISO。曾经把它们混在一起;不用担心,请看一下dir(pendulum.constants),尽管那里还有RFC和ISO格式。

当我们说本地时,虽然是什么意思?好吧,我的意思是:

>>> print(pendulum.now().timezone_name)
Australia/Melbourne
>>>

大概大多数人都在其他地方。

然后继续。长话短说:Pendulum尝试在日期和时间上执行HTTP请求的操作。值得考虑,尤其是它的易用性和大量的文档。

答案 23 :(得分:9)

如果只需要当前时间戳(以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))

答案 24 :(得分:9)

您可以尝试以下

import datetime

now = datetime.datetime.now()
print(now)

import datetime

now = datetime.datetime.now()
print(now.strftime("%Y-%b-%d, %A %I:%M:%S"))

答案 25 :(得分:7)

方法1:从系统日期时间获取当前日期和时间

日期时间模块提供用于处理日期和时间的类。

代码

from datetime import datetime,date

print("Date: "+str(date.today().year)+"-"+str(date.today().month)+"-"+str(date.today().day))
print("Year: "+str(date.today().year))
print("Month: "+str(date.today().month))
print("Day: "+str(date.today().day)+"\n")

print("Time: "+str(datetime.today().hour)+":"+str(datetime.today().minute)+":"+str(datetime.today().second))
print("Hour: "+str(datetime.today().hour))
print("Minute: "+str(datetime.today().minute))
print("Second: "+str(datetime.today().second))
print("MilliSecond: "+str(datetime.today().microsecond))

输出将类似于

Date: 2020-4-18
Year: 2020
Month: 4
Day: 18

Time: 19:30:5
Hour: 19
Minute: 30
Second: 5
MilliSecond: 836071

方法2:如果网络可用,则获取当前日期和时间

urllib 软件包可帮助我们处理表示网页的url。在这里,我们从网页http://just-the-time.appspot.com/收集数据,并使用包 dateparser 从网页中解析日期

代码

from urllib.request import urlopen
import dateparser

time_url = urlopen(u'http://just-the-time.appspot.com/')
datetime = time_url.read().decode("utf-8", errors="ignore").split(' ')[:-1]
date = datetime[0]
time = datetime[1]

print("Date: "+str(date))
print("Year: "+str(date.split('-')[0]))
print("Month: "+str(date.split('-')[1]))
print("Day: "+str(date.split('-')[2])+'\n')

print("Time: "+str(time))
print("Hour: "+str(time.split(':')[0]))
print("Minute: "+str(time.split(':')[1]))
print("Second: "+str(time.split(':')[2]))

输出将类似于

Date: 2020-04-18
Year: 2020
Month: 04
Day: 18

Time: 14:17:10
Hour: 14
Minute: 17
Second: 10

方法3:从计算机的本地时间获取当前日期和时间

Python的 time 模块提供了一个功能,用于从自称为localtime()的时期开始经过的秒数获取本地时间。 ctime()函数以epoch作为参数经过了几秒钟,并返回一个表示本地时间的字符串。

代码

from time import time, ctime
datetime = ctime(time()).split(' ')

print("Date: "+str(datetime[4])+"-"+str(datetime[1])+"-"+str(datetime[2]))
print("Year: "+str(datetime[4]))
print("Month: "+str(datetime[1]))
print("Day: "+str(datetime[2]))
print("Week Day: "+str(datetime[0])+'\n')

print("Time: "+str(datetime[3]))
print("Hour: "+str(datetime[3]).split(':')[0])
print("Minute: "+str(datetime[3]).split(':')[1])
print("Second: "+str(datetime[3]).split(':')[2])

输出将类似于

Date: 2020-Apr-18
Year: 2020
Month: Apr
Day: 18
Week Day: Sat

Time: 19:30:20
Hour: 19
Minute: 30
Second: 20

答案 26 :(得分:6)

时区的当前时间

from datetime import datetime
import pytz

tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY time:", datetime_NY.strftime("%H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London time:", datetime_London.strftime("%H:%M:%S"))

tz_India = pytz.timezone('Asia/India')
datetime_India = datetime.now(tz_India)
print("India time:", datetime_India.strftime("%H:%M:%S"))

答案 27 :(得分:6)

您可以使用此功能来获取时间(遗憾的是它不会说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]

答案 28 :(得分:6)

因为尚无人提及,这是我最近遇到的事情……pytz时区的fromutc()方法与datetime的utcnow()结合是我发现获得有用的当前时间的最佳方法(和日期)。

from datetime import datetime

import pytz


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


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

如果只需要时间,您可以使用local_time.time()来获得。

答案 29 :(得分:6)

import datetime
date_time = str(datetime.datetime.now()).split()
date,time = date_time

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

答案 30 :(得分:3)

获取当前日期时间属性:

import datetime

currentDT = datetime.datetime.now()

print ("Current Year is: %d" % currentDT.year)
print ("Current Month is: %d" % currentDT.month)
print ("Current Day is: %d" % currentDT.day)
print ("Current Hour is: %d" % currentDT.hour)
print ("Current Minute is: %d" % currentDT.minute)
print ("Current Second is: %d" % currentDT.second)
print ("Current Microsecond is: %d" % currentDT.microsecond)


#!/usr/bin/python
import time;

ticks = time.time()
print "Number of ticks since "12:00am, Jan 1, 1970":", ticks

答案 31 :(得分:3)

import datetime

todays_date = datetime.date.today()
print(todays_date)
>>> 2019-10-12

# adding strftime will remove the seconds
current_time = datetime.datetime.now().strftime('%H:%M')
print(current_time)
>>> 23:38

答案 32 :(得分:3)

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'](默认的分隔符是空格)。

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

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

答案 33 :(得分:3)

我们可以使用datetime模块完成

>>> from datetime import datetime
>>> now = datetime.now() #get a datetime object containing current date and time
>>> current_time = now.strftime("%H:%M:%S") #created a string representing current time
>>> print("Current Time =", current_time)
Current Time = 17:56:54

此外,我们可以使用pytZ module获取zome的当前时间。

>>> from pytz import timezone
>>> import pytz
>>> eastern = timezone('US/Eastern')
>>> eastern.zone
'US/Eastern'
>>> amsterdam = timezone('Europe/Amsterdam')
>>> datetime_eu = datetime.now(amsterdam)
>>> print("Europe time::", datetime_eu.strftime("%H:%M:%S"))
Europe time:: 14:45:31

答案 34 :(得分:3)

import datetime

print('date='+datetime.datetime.now().__str__().split(' ')[0]+' '+'time='+datetime.datetime.now().__str__().split(' ')[1]

由于 Qt 被广泛使用,

from PyQt5 import QDateTime
print(QDateTime.currentDateTime().__str__().split('(')[1].rstrip(')'))

答案 35 :(得分:2)

这是如此简单。 试试:

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

答案 36 :(得分:2)

这个问题是针对Python的,但是由于Django是Python使用最广泛的框架之一,因此需要注意的是,如果您使用的是Django,则始终可以使用timezone.now()而不是datetime.datetime.now()。前者是时区“知道”的,而后者则不是。

请参阅this SO answerDjango doc,以了解timezone.now()背后的详细信息和原理。

from django.utils import timezone

now = timezone.now()

答案 37 :(得分:2)

您可以使用ctime():

from time import time, ctime

t = time()

ctime(t)

输出:

Sat Sep 14 21:27:08 2019

这些输出是不同的,因为ctime()返回的时间戳取决于您的地理位置。

答案 38 :(得分:2)

首先从datetime

导入datetime模块
// Start some computation.
QFuture<int> future = QtConcurrent::run(...);

// [A] At this point some time may pass where the computation might finish concurrently

// Instaciate watcher
QFutureWatcher<int> watcher;

// Instantiate an object to receive singal
MyClass myObject;

// Connect slot to watcher's finished() signal
connect(&watcher, SIGNAL(finished()), &myObject, SLOT(handleFinished()));

// Attach watcher to the future
watcher.setFuture(future);

// [B] Will the handleFinished() slot be called at this point even if the concurrent job already completed in point [A] above?

然后打印当前时间为&#39; yyyy-mm-dd hh:mm:ss&#39;

handleFinished()

只获取表格中的时间&#; hh:mm:ss&#39;其中ss代表完整的秒数加上经过的秒数,只需要做;

from datetime import datetime

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

答案 39 :(得分:2)

time模块可以导入各种时间的东西,包括睡眠和其他类型的东西,包括-当前时间类型

import time
time.strftime("%T", time.localtime())

输出应如下所示

05:46:33
11:22:56
13:44:55
22:33:44
00:00:00

答案 40 :(得分:1)

这是仅根据您的问题显示时间的代码:

 from datetime import datetime

 while True:
          time= datetime.now()
          b = time.strftime("%H:%M:%S")
          print(b, end='\r')

此代码将显示您系统的当前时间,不会停止。

答案 41 :(得分:0)

如果您希望有时间用于计时函数调用,则需要time.perf_counter()。

start_time = time.perf_counter()
expensive_function()
time_taken = time.perf_counter() - start_time
print(f'expensive_function() took {round(time_taken,2)}s')

time.perf_counter()→浮动

返回性能计数器的值(以分数秒为单位),即具有最高可用分辨率的时钟以测量较短的持续时间。它确实包括整个系统的睡眠时间。返回值的参考点是不确定的,因此仅连续调用的结果之间的差有效。

3.3版中的新功能。


time.perf_counter_ns()→整数

类似于perf_counter(),但返回时间为纳秒。

3.7版的新功能。

答案 42 :(得分:0)

从Python 3.9开始,zoneinfo模块可用于获取时区,而无需使用第三方库。

要获取特定时区的当前时间:

%zu

答案 43 :(得分:-2)

import datetime
x = datetime.datetime.now()
print(x)

我今年早些时候在W3Schools学习python时发现了这一点! 我强烈建议您将w3schools用于小疑问:-)