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

2024-12-19 09:24:00
admin
原创
138
摘要:问题描述:如何在 Python 中获取当前时间?解决方案 1:使用datetime:>>> import datetime >>> now = datetime.datetime.now() >>> now datetime.datetime(2009, ...

问题描述:

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


解决方案 1:

使用datetime

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

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

>>> from datetime import datetime

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

解决方案 2:

使用time.strftime()

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

解决方案 3:

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

示例输出:'2013-09-18 11:16:32'

strftime查看指令列表。

解决方案 4:

如何在 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 不会因夏令时而改变,但使用者可能会在夏季切换到其他时区,例如英国夏令时。)

日期时间时区感知

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

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

等效地,在 Python 3 中,我们有timezone一个附加了 utctimezone实例的类,这也使得对象能够感知时区(但如果不使用方便的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您还可以使用timezonelocalize方法或通过替换 tzinfo 属性(使用,这是盲目完成的)来使简单的 datetime 对象具有感知能力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:

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

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

解决方案 6:

from time import time

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

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

解决方案 7:

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

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

此页面有更多详细信息。

解决方案 8:

前面的答案都是很好的建议,但我发现最容易使用ctime()

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

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

解决方案 9:

最快的方法是:

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

解决方案 10:

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

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

解决方案 11:

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

解决方案 12:

.isoformat()在文档中,但还没有在这里(这与@Ray Vega 的答案非常相似):

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

解决方案 13:

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

解决方案 14:

为什么不问问美国海军天文台——美国海军的官方计时机构呢?

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

如果您住在 DC 地区(像我一样)延迟可能不会太糟糕......

解决方案 15:

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

解决方案 16:

这就是我最终的选择:

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

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

strftime格式代码表

解决方案 17:

datetime.now()将当前时间作为表示本地时区时间的简单 datetime 对象返回。该值可能不明确,例如在 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

解决方案 18:

这个问题不需要为了它而给出新的答案……但是,一个闪亮的新玩具/模块就足够了。那就是Pendulum 库,它似乎可以做 arrow 尝试过的那种事情,但没有困扰 arrow 的固有缺陷和错误。

例如,原问题的答案:

>>> 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 做的事情。它值得考虑,尤其是它的易用性和广泛的文档。

解决方案 19:

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)。您可以获取与变量相关的所有属性和方法。

解决方案 20:

>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38: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:

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

解决方案 23:

时区的当前时间

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

解决方案 24:

要获得毫秒的精确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)

解决方案 25:

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

解决方案 26:

您可以使用此函数来获取时间(不幸的是它没有显示上午或下午):

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]

解决方案 27:

您可以尝试以下操作

import datetime

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

或者

import datetime

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

解决方案 28:

因为还没有人提到它,而这是我最近遇到的问题...... 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:

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

解决方案 30:

在 Python 中,有很多方法可以以不同的格式获取当前时间。

我把所有都列出来了,你可以根据自己的需要使用它们。

按日期时间方法

from datetime import datetime

now = datetime.now()

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

输出:当前时间 = 07:41:19

使用时间模块的当前时间

import time

t = time.localtime()
current_time = time.strftime("%H:%M:%S", t)
print(current_time)

2022 年 7 月 12 日星期二 10:37:46

想要特定时区的时间?试试这个。

from datetime import datetime
import pytz

# Get the timezone object for New York
tz_NY = pytz.timezone('America/New_York') 

# Get the current time in New York
datetime_NY = datetime.now(tz_NY)

# Format the time as a string and print it
print("NY time:", datetime_NY.strftime("%H:%M:%S"))

# Get the timezone object for London
tz_London = pytz.timezone('Europe/London')

# Get the current time in London
datetime_London = datetime.now(tz_London)

# Format the time as a string and print it
print("London time:", datetime_London.strftime("%H:%M:%S"))

纽约时间:03:45:16

伦敦时间:08:45:16

UTC(协调世界时)

from datetime import datetime

print("UTC Time: ", datetime.utcnow())

世界标准时间:2022-06-20 11:10:18.289111

ISO 格式

from datetime import datetime as dt

x = dt.now().isoformat()
print('Current ISO:', x)

当前 ISO:2022-06-20T17:03:23.299672

EPOCH时间

import time

print("Epoch Time is : ", int(time.time()))

纪元时间为:1655723915

使用时间获取当前 GMT(绿色平均时间)

import time

# current GMT Time
gmt_time = time.gmtime(time.time())

print('Current GMT Time:
', gmt_time)

当前 GMT 时间:time.struct_time(tm_year=2022, tm_mon=6, tm_mday=20, tm_hour=11, tm_min=24, tm_sec=59, tm_wday=0, tm_yday=171, tm_isdst=0)

供参考

  • time比 更准确,datetime因为如果您不想与夏令时(DST)产生歧义,请使用time

  • datetime拥有更多可供使用的内置对象,但对时区的支持有限。

  • UTC:在使用需要全球用户记录事件的应用程序时是一个有用的参考。

  • EPOCH:用于操作系统和文件格式。

  • ISO 格式:避免在世界各地传达日期和时间相关数据时出现任何问题。

  • Greenmeantime:美国已经决定以格林威治标准时间为基础制定自己的国家时区方案,爱尔兰、加拿大等国家也将格林威治标准时间 (GMT) 视为其参考时间。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1590  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1361  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   18  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   18  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   19  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用