time用法 - 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'

以下是我用來獲取時間而不必格式化的內容。 有些人不喜歡split方法,但它在這裡很有用:

from time import ctime
print ctime().split()[3]

它將以HH:MM:SS格式打印。


你可以使用time.strftime()

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

使用:

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

>>> print(datetime.datetime.now())
2018-07-29 09:17:13.812189

而且只是時間:

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

>>> print(datetime.datetime.now().time())
09:17:51.914526

有關更多信息,請參閱文檔

要保存鍵入,可以從datetime模塊導入datetime對象:

>>> from datetime import datetime

然後刪除前導datetime. 從以上所有。


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

如果您只想要以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))

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

您可以使用此功能來獲取時間(不幸的是它不說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]

所有好建議,但我發現自己最簡單的使用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'

簡單易行:

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

Harley的答案類似,但是使用str()函數來實現快速,更臟,更易讀的格式:

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

這就是我最終的目的:

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