如何在 Python 中获取当前时间

Posted

技术标签:

【中文标题】如何在 Python 中获取当前时间【英文标题】:How to get the current time in Python 【发布时间】:2010-09-29 18:05:14 【问题描述】:

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

【问题讨论】:

请注意,投票最多的答案是 timezonoe-naive datetime,而我们看到在生产环境中,全球越来越多的服务连接在一起,时区感知 datetime 成为必需的标准跨度> 另外,对于 django,请参阅 here 了解时区 这是@SławomirLenart 的一个非常有效的观点,这里有一个快速教程显示multiple ways to get the current time based on the timezone 【参考方案1】:

试试这个:-

from datetime import datetime

now = datetime.now()

current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)

【讨论】:

【参考方案2】:

要精确获得 3 小数点毫秒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 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)

【讨论】:

这适用于 Python 3:time.strftime("%H:%M:%S", time.localtime()) + '.'.format(int(time.time( ) % 1 * 1000))【参考方案3】:

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

 from datetime import datetime

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

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

【讨论】:

【参考方案4】:
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(')'))

【讨论】:

与其他答案相比,您的答案冗长而复杂【参考方案5】:

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

【讨论】:

【参考方案6】:

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

time 模块

time 模块提供了以“自纪元以来的秒数”为单位告诉我们时间的函数以及其他实用程序。

import time

Unix 纪元时间

这是您在数据库中保存时间戳时应采用的格式。它是一个简单的浮点数,可以转换为整数。它也适用于以秒为单位的算术运算,因为它表示自 1970 年 1 月 1 日 00:00:00 以来的秒数,并且相对于我们接下来要研究的其他时间表示而言,它是记忆之轻:

>>> time.time()
1424233311.771502

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

但是,这对于人工调度来说并不理想。如果您有一个希望在某个时间点发生的未来事件,您需要将该时间与一个可以解析为datetime 对象或序列化datetime 对象的字符串一起存储(这些将是稍后介绍)。

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)格式,并且字典排序是相当于按时间排序:

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

日期时间的utcnow

您可以通过执行以下操作以 UTC 时间(全球标准)获取 datetime 对象:

>>> 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 时区感知

但是,到目前为止,我们创建的日期时间对象都不能轻松转换为不同的时区。我们可以使用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,这是盲目地完成)来使天真的 datetime 对象感知,但这些是最后的手段而不是最佳实践:

>>> 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 纪元时间相比,它需要更多的内存并且更容易出错,我已演示过首先。

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

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

【讨论】:

我想每个人都同意ctime 必须是格式化日期时间的最奇怪的方式。星期几和月份的缩写,月份的日期,24 小时制 h:m:s,然后是四位数的年份。喜欢对日期字符串进行排序的书呆子、美国人、欧洲人……每个人——是的,每个人——都可以在这种格式中找到至少两件令人恼火的事情。虽然我会使用它,因为它超级简单。 正如我上面所说的ctime:“您还可以以操作系统首选的方式表示当前时间(这意味着它可以在您更改系统偏好设置时更改,所以不要正如我所看到的其他人所期望的那样,这将成为所有系统的标准)。这通常是用户友好的,但通常不会导致可以按时间顺序排序的字符串:"【参考方案7】:

你可以试试下面的

import datetime

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

import datetime

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

【讨论】:

【参考方案8】:

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

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

from datetime import datetime
from zoneinfo import ZoneInfo

datetime.now(tz=ZoneInfo("Europe/Amsterdam"))

【讨论】:

可供下载的最新Python版本是3.8.5! python.org/downloads 当然可以,但是以后其他人阅读这篇文章时,就不会这样了。事实上,今天发布了第一个候选版本:docs.python.org/3.9/whatsnew/3.9.html【参考方案9】:

如果您想要时间用于计时函数调用,那么您需要 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() → int

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

3.7 版中的新功能。

https://docs.python.org/3/library/time.html#time.perf_counter

【讨论】:

【参考方案10】:

我们可以使用 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获取时区的当前时间。

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

【讨论】:

【参考方案11】:

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

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

输出应该是这样的

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

【讨论】:

【参考方案12】:

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

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

代码

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包从网页中解析出datetime

代码

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() 函数将自纪元以来经过的秒数作为参数,并返回一个表示本地时间的字符串。

代码

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

【讨论】:

【参考方案13】:

您可以使用 ctime() 来做到这一点:

from time import time, ctime
t = time()
ctime(t)

输出:

Sat Sep 14 21:27:08 2019

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

【讨论】:

【参考方案14】:

时区的当前时间

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

#list timezones
pytz.all_timezones

【讨论】:

【参考方案15】:
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')

对于这个例子,输出将是这样的:'2013-09-18 11:16:32'

这是strftime directives的列表。

【讨论】:

【参考方案16】:

这个问题不需要一个新的答案只是为了它......一个闪亮的新玩具/模块,然而,足够的理由。那就是Pendulum library,它似乎做了箭头尝试的那种事情,除了没有困扰箭头的固有缺陷和错误。

比如原问题的答案:

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

有很多标准需要解决,包括多个 RFC 和 ISO,需要担心。永远把它们弄混;不用担心,看一下dir(pendulum.constants) 不过,这里不只是 RFC 和 ISO 格式。

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

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

大概你们中的大多数人是指其他地方。

然后继续。长话短说:Pendulum 尝试在日期和时间方面做请求对 HTTP 所做的事情。值得考虑,尤其是它的易用性和丰富的文档。

【讨论】:

【参考方案17】:

用途:

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

>>> print(datetime.datetime.now())
2009-01-06 15:08:24.789150

只是时间:

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

>>> print(datetime.datetime.now().time())
15:08:24.789150

更多信息请参见the documentation

为了节省输入,您可以从datetime 模块中导入datetime 对象:

>>> from datetime import datetime

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

【讨论】:

如果这个答案涵盖时区(可能是 UTC 为例)并且可能以 time.time() 开头,那就太好了。 @Toskan 格式不是问题的一部分,因此它不应该成为答案的一部分。已经提供了一个链接,指向该模块的更多文档,其中包含格式等内容。 原始答案是哪个版本的 Python?只需在我的 Python 2.7 交互式控制台中输入 datetime.datetime.now()(IronPython 尚未更新),我就会得到与答案中使用 print() 的较新示例相同的行为。我没有成功复制原始答案显示的内容(datetime.datetime(2009, 1, 6, 15, 8, 24, 78915))。 (不是我真的想要, print() 行为是首选,但我很好奇。) @BobVicktor:Python 2.7、3.7 和 3.8 对我来说都给出了相同的行为,不确定你看到了什么。 @HarleyHolcombe 嗯...也许是 IronPython 的东西?当我自己输入datetime.now() 时,它会打印出来,就像你的答案显示print(datetime.now())...【参考方案18】:
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

【讨论】:

【参考方案19】:

这很简单。 试试:

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

【讨论】:

【参考方案20】:

前面的回答都是不错的建议,不过我觉得用ctime()最方便:

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

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

【讨论】:

OP 询问如何获取时间,而不是如何显示时间!【参考方案21】:

最快的方法是:

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

【讨论】:

【参考方案22】:
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'

【讨论】:

我想你的意思是说“datetime.now().strftime(...)” 是的,可以如你所说。 "datetime.datetime.now().strftime("%H:%M:%S:%MS")" %MS 不给你毫秒!!【参考方案23】:

你可以使用这个函数来获取时间(不幸的是它没有说上午或下午):

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

要获得小时、分钟、秒和毫秒以便稍后合并,您可以使用以下函数:

小时:

def gethour():
    from datetime import datetime
    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 (str(datetime.now())).split('.')[1]

【讨论】:

【参考方案24】:

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

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

from django.utils import timezone

now = timezone.now()

【讨论】:

【参考方案25】:

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

【讨论】:

【参考方案26】:

获取当前日期时间属性:

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

【讨论】:

【参考方案27】:
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'](默认分隔符)中创建一个列表是空间)。

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

一个人应该只调用一个代码行。不应该像我那样称呼他们,这只是一个例子,因为在某些情况下你会得到不同的值,罕见但并非不可能的情况。

【讨论】:

您可能还想解释为什么从多次调用ctime() 中提取部分(在每次调用中使用“当前”时间)不一定会在相互结合时给出有用的值。 // 在这里做什么?【参考方案28】:

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

【讨论】:

此方法将在以后的 pandas 版本中被弃用。请改用 datetime 模块。【参考方案29】:
>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'

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

这个page有更多细节。

【讨论】:

【参考方案30】:
import datetime
date_time = str(datetime.datetime.now()).split()
date,time = date_time

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

【讨论】:

以上是关于如何在 Python 中获取当前时间的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python获取当前时间[重复]

如何在 Python 中获取当前位置的日期和时间 [重复]

如何在 Python 中获取或打印 GMT 时区的当前日期时间? [复制]

在android中如何获取当前日期?

如何在 Python 中获取时间 [重复]

Python中获取当前日期的格式