如何获取当前时间?
使用 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
为了节省输入,您可以从 datetime
模块导入 datetime
对象:
>>> from datetime import datetime
然后从上述所有内容中删除前缀 datetime.
。
使用 time.strftime()
:
>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
time
模块而不是 datetime
模块?
localtime()
而不是 gmtime()
来获取您的当地时间。
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
示例输出:'2013-09-18 11:16:32'
请参阅 strftime
directives 列表。
与 Harley's answer 类似,但使用 str()
函数来获得一种快速且易读、更易于阅读的格式:
>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
如何在 Python 中获取当前时间?
时间模块
time
模块提供了以“自纪元以来的秒数”为单位告诉我们时间的函数以及其他实用程序。
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.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
类附加了一个 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
所说:“您还可以以操作系统首选的方式表示当前时间(这意味着当您更改系统首选项时它可能会改变,所以不要依赖它作为所有标准系统,正如我看到其他人所期望的那样)。这通常是用户友好的,但通常不会导致可以按时间顺序排序的字符串:“
做
from time import time
t = time()
t - 浮点数,适用于时间间隔测量。
Unix 和 Windows 平台存在一些差异。
>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'
以指定格式输出当前 GMT。还有一个 localtime()
方法。
此 page 有更多详细信息。
前面的答案都是很好的建议,但我发现使用 ctime()
最简单:
In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'
这给出了当前本地时间的格式良好的字符串表示。
最快的方法是:
>>> import time
>>> time.strftime("%Y%m%d")
'20130924'
如果您需要当前时间作为 time
对象:
>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)
您可以使用 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'
.isoformat()
在文档中,但还没有(这与@Ray Vega 的答案非常相似):
>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'
为什么不问问美国海军的官方计时员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])
如果你住在华盛顿地区(像我一样),延迟可能不会太糟糕......
使用 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
如果您已经在使用 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'))
这就是我最终的结果:
>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11
此外,此表是选择适当格式代码以按照您想要的方式格式化日期的必要参考(来自 Python“日期时间”文档 here)。
https://i.stack.imgur.com/i6Hg7.jpg
strftime(time_format)
将当前本地时间作为对应于给定 time_format
的字符串返回。注意:time.strftime()
和 datetime.strftime()
支持不同的指令集,例如 %z
is not supported by time.strftime()
on Python 2。
time
模块函数都是围绕相应 C 函数的薄包装器。 datetime
是一个更高的级别,通常更便于移植。
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
datetime.utcnow()
来表示 UTC 中的当前时间,因为它仍然返回一个“朴素”的日期时间对象——相反,建议使用 datetime.now(timezone.utc)
,因为它返回一个“感知”的日期时间对象。有关更多详细信息,请参阅 Python 文档:docs.python.org/3/library/…
timezone.utc
。或许,既然 Python 2.7 已停产,naive-datetime 可能会被删除
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)
或任何变量,包括包。您可以获得与变量关联的所有属性和方法。
import datetime
则为 datetime.datetime.now()
\n 如果 from datetime import datetime
则为 datetime.now()
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'
这个问题不需要一个新的答案只是为了它......一个闪亮的新玩具/模块,然而,足够的理由。那就是 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 所做的事情。值得考虑,尤其是它的易用性和广泛的文档。
默认情况下,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
尝试 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'
arrow.now('Time/Zone')
可能会失败(arrow
使用在 arrow.now()
中使用的 dateutil
that has broken utc -> local conversions。注意:pytz
has no such issue。另外,there are other timezone-related issues
时区的当前时间
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
要精确获取 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)
如果您只想要以 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))
你可以使用这个函数来获取时间(不幸的是它没有说上午或下午):
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]
您可以尝试以下方法
import datetime
now = datetime.datetime.now()
print(now)
或者
import datetime
now = datetime.datetime.now()
print(now.strftime("%Y-%b-%d, %A %I:%M:%S"))
因为还没有人提到它,这是我最近遇到的事情...... pytz 时区的 fromutc() 方法结合 datetime 的 utcnow() 是我发现获得有用的当前时间(和日期)的最佳方法在任何时区。
from datetime import datetime
import pytz
JST = pytz.timezone("Asia/Tokyo")
local_time = JST.fromutc(datetime.utcnow())
如果您想要的只是时间,那么您可以使用 local_time.time()
来获得它。
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
方法1:从系统日期时间获取当前日期和时间
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 的时间模块提供了一个函数,用于从称为 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
datetime.datetime.now()
即可获得与答案中使用print()
的较新示例相同的行为。我没有成功复制原始答案显示的内容(datetime.datetime(2009, 1, 6, 15, 8, 24, 78915))。 (不是我真的想要, print() 行为是首选,但我很好奇。)datetime.now()
时,它会打印出与您的答案显示print(datetime.now())
相同的内容...