如何获取当前时间?


当前回答

如果您需要时区感知解决方案。我喜欢使用以下5行代码来获取当前时间。

from datetime import datetime
import pytz

# Specify the timezone
my_time_zone = pytz.timezone('Asia/Singapore')

# Pass the timezone to datetime.now() function
my_time = datetime.now(my_time_zone)

# Convert the type `my_time` to string with '%Y-%m-%d %H:%M:%S' format.
current_time = my_time.strftime('%Y-%m-%d %H:%M:%S') # current_time would be something like 2023-01-23 14:09:48

您可以使用pytz.all_timezones查找所有时区的列表。

%Y-%m-%d%H:%m:%S中符号的含义可以在geeksfgeeks Python strftime()函数中找到

其他回答

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

时间模块

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

import time

Unix大纪元时间

这是保存在数据库中时应该使用的时间戳格式。它是一个可以转换为整数的简单浮点数。它也适用于以秒为单位的算术,因为它代表了自1970年1月1日00:00:00以来的秒数,相对于我们接下来将要讨论的其他时间表示,它是一种记忆之光:

>>> time.time()
1424233311.771502

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

然而,这对于人工调度来说并不理想。如果您希望在某个时间点发生将来的事件,那么您需要使用一个字符串来存储该时间,该字符串可以解析为datetime对象或序列化datetime对象(稍后将对此进行描述)。

时间.ctime

您还可以以操作系统首选的方式表示当前时间(这意味着当您更改系统首选项时,它可能会发生变化,所以不要像我看到的其他人所期望的那样,依赖于此来作为所有系统的标准)。这通常是用户友好的,但通常不会产生可以按时间顺序排序的字符串:

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

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

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

这种转换也不利于记录保存(除非是只有人类才能解析的文本,而且随着光学字符识别和人工智能的改进,我认为这种情况的数量会减少)。

日期时间模块

datetime模块在这里也非常有用:

>>> import datetime

datetime.datetime.now

datetime.now是一个返回当前时间的类方法。它使用不带时区信息的time.localtime(如果没有给出,请参见下面的时区信息)。它有一个表示(这将允许您重新创建一个等效的对象)在外壳上回响,但当打印(或强制转换为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

datetime的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中,我们有一个附加了utc时区实例的时区类,这也使对象时区可感知(但要转换为另一个没有方便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时区本地化方法,或通过替换tzinfo属性(使用替换,这是盲目的),使天真的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 Epoch时间相比,它需要更多的内存,更容易出错。

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

如果您使用Python为用户显示时间,ctime工作得很好,不是在表中(通常排序不好),而是在时钟中。然而,我个人建议,在Python中处理时间时,使用Unix时间或时区感知UTC日期时间对象。

与Harley的答案类似,但使用str()函数实现一种更快速、更易于阅读的格式:

>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
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(')'))

如果您只希望当前时间戳以毫秒为单位(例如,测量执行时间),也可以使用“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))

使用日期时间:

>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2009, 1, 6, 15, 8, 24, 78915)
>>> print(now)
2009-01-06 15:08:24.789150

对于没有日期的时钟时间:

>>> now.time()
datetime.time(15, 8, 24, 78915)
>>> print(now.time())
15:08:24.789150

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

>>> from datetime import datetime

然后删除前缀datetime。从以上所有方面来看。