python获取当前时间戳 - python获取当前时间毫秒




如何在Python中获取当前时间 (20)

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


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

time模块

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

import time

Unix大纪元时间

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

>>> time.time()
1424233311.771502

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

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

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

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

日期时间感知

但是,到目前为止我们创建的日期时间对象都不能轻易转换为各种时区。 我们可以用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 (但是转换到另一个时区而没有方便的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方法pytz天真的日期时间对象,或者替换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时区,并将时间转换为pytz模块中可用的数百个时区。

人们可以表面上将此对象序列化为UTC时间并将其存储在数据库中,但它需要更多的内存并且比仅仅存储Unix Epoch时间更容易出错,我首先证明了这一点。

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

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


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

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

Harley的答案类似,但是使用str()函数来实现快速,更脏,更易读的格式:

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

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

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


你可以使用time.strftime()

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

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

from time import time

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

Unix和Windows平台有一些区别。


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

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

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

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

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

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

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)

最快的方法是

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

简单易行:

使用datetime模块,

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

输出:

2017-10-17 23:48:55

要么

利用time

import time
print(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))

输出:

2017-10-17 18:22:26

这就是我最终的目的:

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

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


首先从datetime导入datetime模块

from datetime import datetime

然后将当前时间打印为'yyyy-mm-dd hh:mm:ss'

print(str(datetime.now())

为了得到'hh:mm:ss'形式的时间,其中ss代表完整的秒数加上经过的秒数,就这样做;

print(str(datetime.now()[11:])

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


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

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

这是strftime的列表。


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

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

page包含更多详细信息。


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

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

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


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)或任何变量,包括包。 您可以获得与变量关联的所有属性和方法。





time