目次
struct_time转化为字符串及字符串转为struct_time
测量程序的运行时间
datetime
UNIX エポック タイムスタンプと呼ばれ、1970 年 1 月 1 日の 0:00 から今日までに経過した秒数です。
struct_time が文字列に変換され、その文字列が struct_time に変換されます
プログラムの実行時間の測定
将datetime转化为字符串形式及字符串转为datetime对象
ホームページ バックエンド開発 Python チュートリアル Python の時刻モジュールと日時モジュールの詳細な紹介

Python の時刻モジュールと日時モジュールの詳細な紹介

Jul 20, 2017 pm 03:33 PM
datetime python time

time モジュールの時間表現には主に 3 つの形式があります:

a. 1970 年 1 月 1 日 00:00:00 から始まる秒単位のオフセットを表すタイムスタンプ

b 、struct_time 時間タプル、合計9つの元素グループからなる。

c. 時間をフォーマットする フォーマットされた構造により、時間が読みやすくなります。カスタム形式と固定形式が含まれます。

time

よく使用される関数は、time.time()time.sleep() です。 time.time()time.sleep()函数。

import timeprint(time.time())
ログイン後にコピー
1499305554.3239055
ログイン後にコピー

上面的浮点数称为UNIX纪元时间戳,是从1970年1月1日0点起到今天经过的秒数。可以看到后面有6位小数,使用round函数,可以实现浮点数的四舍五入。如下

# 默认四舍五入到整数位,即不保留小数print(round(time.time()))# 可指定参数保留的小数位数print(round(time.time(), 2))
ログイン後にコピー
1499305554
1499305554.49
ログイン後にコピー

time.sleep(sec)可以让当前休眠,参数填入秒(s)。

print('good')
time.sleep(5.5)# 5.5秒后才打印这句print('yes')
ログイン後にコピー
good
yes
ログイン後にコピー

其他一些函数的使用

# 返回UTC时间print(time.gmtime())# 返回本地时间,在中国就是UTC+8print(time.localtime())
ログイン後にコピー
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=1, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=9, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)
ログイン後にコピー

可以发现这是一个元组类型,中国所在时区位UTC+8,可以发现除了tm_hour不一样(它们相差了刚好+8),其余都一样。

下面的函数可以返回一个格式化的日期时间,看起来更加直观。

print(time.ctime())print(time.asctime())# 由于使用默认参数和上面的结果一样print(time.ctime(time.time()))print(time.asctime(time.localtime()))
ログイン後にコピー
Thu Jul  6 09:46:15 2017
Thu Jul  6 09:46:15 2017
Thu Jul  6 09:46:15 2017
Thu Jul  6 09:46:15 2017
ログイン後にコピー
  • ctime()可以传入一个时间戳,没有指定参数时,默认使用当前时间戳作为参数。即time.time()

  • gtime()可以传入一个struct_time,没有指定参数时,默认使用当前时间。即time.localtime()

struct_time转化为字符串及字符串转为struct_time

  • strptime的第一个参数是字符串形式的日期,第二个参数是自定义的日期转换格式。这两个参数的格式一定要对应。比如time.strptime('2017/7/6', '%Y-%m-%d')一个用了斜杠,一个用了短横线,就会报错。此函数返回一个struct_time

  • strftime的第一个参数是想要转化成的日期格式,第二个参数是一个struct_time,此函数将元组形式的struct_time转化成第一个参数指定的格式样子,返回的是转化后的日期字符串形式。

%Y-%m-%d表示年月日,在datetime模块会详细介绍。

a = time.strptime('2017/7/6', '%Y/%m/%d')
b = time.strftime('%Y-%m-%d', time.localtime())print(a)print(b)
ログイン後にコピー
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=-1)
2017-07-06
ログイン後にコピー

测量程序的运行时间

使用时间戳可以方便地计时一段程序地运行时间

start_time = time.time()sum = 0for i in range(10000000):sum += 1end_time = time.time()print(end_time - start_time)
ログイン後にコピー
2.185124397277832
ログイン後にコピー

可以看到执行循环计算加法一千万次,那段程序花了2秒多。

也可以使用time.clock()函数

start = time.clock()print(start)  # 2.6773594453225194e-06time.sleep(2)
end = time.clock()print(end - start)  # 差值代表了睡眠2秒的时间。2.000246763295544time.sleep(3)print(time.clock())  # 5.00058991153112,返回的是从第一次调用到这次调用的时间间隔
ログイン後にコピー
4.4622657422041984e-07
2.0026006084745567
5.013243112269714
ログイン後にコピー

可以看到clock第一次调用时比较奇怪,它返回的是进程运行的时间。之后再次调用都是与第一次调用clock的值的差了。即从第一次调用开始算起,到当前调用clock所经历的时间。
像上面一样,在想测试的一部分代码的上方设置start,结束的地方设置end,相减也能得到片段代码运行时间,而且比time.time()还要准确。

datetime

datetime模块用来管理日期和时间,其中有三个子模块。分别是time、date、datetime,所以想要使用datetime可以使用下面的导入方式。

from datetime import datetime# 返回当前时间now = datetime.now()print(now.year, now.month, now.microsecond)# 可以自定义参数,返回格式化后的时间dt = datetime(2017, 10, 1, 23, 59, 59, 456123)print(dt)
ログイン後にコピー
2017 7 719609
2017-10-01 23:59:59.456123
ログイン後にコピー

datetime接受7个参数,分别对应年、月、日、时、分、秒、微秒。分别保存在datetime的year、month、day、hour、minute、second、microsecond属性中。

由时间戳可以转换成datetime类型。如下,使用当前时间的时间戳。实际上等效于datetime.now()。当然反过来由datetime得到时间戳也是可以的。

# 时间戳转datetimenow = datetime.fromtimestamp(time.time())print(now)
sometime = datetime(2017, 7, 5, 23, 59, 59)# datetime转时间戳print(sometime.timestamp())
ログイン後にコピー
2017-07-06 09:46:07.903769
1499270399.0
ログイン後にコピー

这些datetime对象可以使用><=

dt1 = datetime(2017, 5, 31)
dt2 = datetime(2017, 4, 1)print(dt1 - dt2)print(dt1 > dt2)
ログイン後にコピー
60 days, 0:00:00
True
ログイン後にコピー
上記の浮動小数点数は

UNIX エポック タイムスタンプと呼ばれ、1970 年 1 月 1 日の 0:00 から今日までに経過した秒数です。

round 関数を使用すると、最後に小数点以下 6 桁があることがわかります。以下のように

import datetime

delta = datetime.timedelta(weeks=2, days=7, hours=1, seconds=59,microseconds=234353)
delta1 = datetime.timedelta(days=5, hours=2)print(delta.seconds)  # 返回属性hours和seconds的和print(delta.total_seconds()) # 只是以秒来表示这段时间print(delta > delta1)print(delta + delta1)
ログイン後にコピー
3659
1818059.234353
True
26 days, 3:00:59.234353
ログイン後にコピー
ログイン後にコピー
time.sleep(sec) で現在のスリープを設定し、パラメータとして秒を入力します。 🎜🎜
from datetime import datetime

a = datetime.strptime(&#39;2017/7/6&#39;, &#39;%Y/%m/%d&#39;)
b = datetime.now().strftime(&#39;%Y-%m-%d&#39;)print(a)print(b)
ログイン後にコピー
ログイン後にコピー
🎜
2017-07-06 00:00:00
2017-07-06
ログイン後にコピー
ログイン後にコピー
🎜他のいくつかの関数を使用すると、これがタプル型であることがわかります。tm_hour< を除いて、中国のタイムゾーンは UTC+8 であることがわかります。 /code> (それらは異なります) (正確に +8)、残りは同じです。 🎜🎜次の関数は、書式設定された日付と時刻を返すことができ、より直感的に見えます。 🎜🎜rrreee🎜rrreee<ul class=" list-paddingleft-2"><li>🎜<code>ctime() は 🎜timestamp🎜 を渡すことができます。パラメータが指定されていない場合は、現在のタイムスタンプが使用されます。デフォルトではパラメータとして。つまり、time.time()🎜
  • 🎜gtime() は、パラメーターが指定されていない場合、🎜struct_time🎜 に渡すことができます。デフォルトでは時間が使用されます。つまり、time.localtime()🎜
  • struct_time が文字列に変換され、その文字列が struct_time に変換されます

    • 🎜strptime の最初のパラメータは文字列形式の日付で、2 番目のパラメータはカスタムの日付変換形式です。これら 2 つのパラメータの形式は対応している必要があります。たとえば、time.strptime('2017/7/6', '%Y-%m-%d') の一方にスラッシュが使用され、もう一方にダッシュが使用されている場合、次のようなエラーが発生します。報告。この関数は struct_time を返します🎜
    • 🎜 strftime の最初のパラメーターは変換先の日付形式で、2 番目のパラメーターは struct_time のタプル形式を最初の形式に変換します。パラメータで指定した形式は、変換された日付文字列形式です。 🎜
    🎜%Y-%m-%d は、年、月、日を表します。これについては、datetime モジュールで詳しく説明します。 🎜🎜rrreee🎜rrreee

    プログラムの実行時間の測定

    🎜タイムスタンプを使用すると、プログラムの実行時間を簡単に計ることができます🎜🎜rrreee🎜rrreee🎜ループ計算の加算が1000万回実行されていることがわかります、そのセクション 手順には 2 秒以上かかりました。 🎜🎜 time.clock() 関数を使用することもできます🎜🎜rrreee🎜rrreee🎜 初めて呼び出されたとき、クロック が奇妙であることがわかります🎜プロセスの実行時間 🎜 を返します。後続の呼び出しは、lock への最初の呼び出しの値とは異なります。つまり、最初の呼び出しから lock への現在の呼び出しまでの経過時間です。 🎜上記と同様に、テストしたいコード部分の上に start を設定し、最後に end を設定すると、フラグメント コードの実行時間を減算することもでき、time よりも正確になります。 .time()。 🎜🎜datetime🎜🎜datetime モジュール は日付と時刻を管理するために使用され、3 つのサブモジュールがあります。それらは time、date、datetime であるため、datetime を使用したい場合は、次のインポート方法を使用できます。 🎜🎜rrreee🎜rrreee🎜datetime は、年、月、日、時、分、秒、マイクロ秒に対応する 7 つのパラメーターを受け入れます。 datetime の 年、月、日、時、分、秒、マイクロ秒 属性にそれぞれ保存されます。 🎜🎜タイムスタンプは日時型に変換できます。以下のように、現在時刻のタイムスタンプを使用します。事実上、datetime.now() と同等です。もちろん、日時からタイムスタンプを取得することも可能です。 🎜🎜rrreee🎜rrreee🎜 これらの日時オブジェクトでは、><= 記号を使用して 2 つの日付の順序を比較できます。減算演算を実行して 2 つの瞬間の差を表すこともできます。たとえば、🎜🎜rrreee🎜rrreee🎜timedeltaは期間を意味します🎜🎜これは瞬間ではなく、期間を意味することに注意してください。 🎜🎜りー🎜
    3659
    1818059.234353
    True
    26 days, 3:00:59.234353
    ログイン後にコピー
    ログイン後にコピー

    timedelta的接受的参数有weeks、days、hours、minutes、seconds、microseconds,但是其属性却只有days、seconds、microseconds。并且除了像datetime一样支持大小比较、减法运算外,还可以进行加法运算,表示两个时间段的差值

    将datetime转化为字符串形式及字符串转为datetime对象

    time模块也有这两个函数(见上面的例子),使用上比较累类似。

    • strptime按照指定格式将字符串形式的日期转换成datetime对象并返回。

    • strftime将一个datetime对象(比如now)根据指定的格式转换成字符串并返回。

    from datetime import datetime
    
    a = datetime.strptime(&#39;2017/7/6&#39;, &#39;%Y/%m/%d&#39;)
    b = datetime.now().strftime(&#39;%Y-%m-%d&#39;)print(a)print(b)
    ログイン後にコピー
    ログイン後にコピー
    2017-07-06 00:00:00
    2017-07-06
    ログイン後にコピー
    ログイン後にコピー

    关于日期时间的格式,看下表。

    格式指令 含义
    %Y 带世纪的四位年份,如2017
    %y 后两位年份,如17表示2017
    %m 月份,从01到12
    %B 完整的月份,如November
    %b 月份的简写,如Nov
    %d 一个月中的第几天,如从01到31(如果有的话)
    %j 一年中的第几天
    %w 一周中的第几天
    %A 完整的周几,如Monday
    %a 简写的周几,如Mon
    %H 24小时制的小时00-23
    %h 12小时制的小时01-12
    %M 分,00-59
    %S 秒,00-59
    %p AM或者PM

    以上がPython の時刻モジュールと日時モジュールの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

    LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

    Python hourglassグラフ図面:可変未定義エラーを避ける方法は? Python hourglassグラフ図面:可変未定義エラーを避ける方法は? Apr 01, 2025 pm 06:27 PM

    Python:Hourglassグラフィック図面と入力検証この記事では、Python NoviceがHourglass Graphic Drawingプログラムで遭遇する可変定義の問題を解決します。コード...

    Python functools.partialオブジェクトによって内部的にカプセル化された元の関数を表示する方法は? Python functools.partialオブジェクトによって内部的にカプセル化された元の関数を表示する方法は? Apr 01, 2025 pm 04:15 PM

    python functools.partialオブジェクトのpython functools.partialを使用してPythonを使用する視聴方法を深く探索します。

    Pythonクロスプラットフォームデスクトップアプリケーション開発:どのGUIライブラリが最適ですか? Pythonクロスプラットフォームデスクトップアプリケーション開発:どのGUIライブラリが最適ですか? Apr 01, 2025 pm 05:24 PM

    Pythonクロスプラットフォームデスクトップアプリケーション開発ライブラリの選択多くのPython開発者は、WindowsシステムとLinuxシステムの両方で実行できるデスクトップアプリケーションを開発したいと考えています...

    あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

    PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

    GoogleとAWSはパブリックピピイメージソースを提供していますか? GoogleとAWSはパブリックピピイメージソースを提供していますか? Apr 01, 2025 pm 05:15 PM

    多くの開発者はPypi(PythonPackageIndex)に依存しています...

    Pythonで大規模な製品データセットを効率的にカウントしてソートするにはどうすればよいですか? Pythonで大規模な製品データセットを効率的にカウントしてソートするにはどうすればよいですか? Apr 01, 2025 pm 08:03 PM

    データの変換と統計:大規模なデータセットの効率的な処理この記事では、製品情報を含むデータリストを別の含有しているものに変換する方法を詳細に紹介します...

    Pythonの高解像度画像の処理を最適化して、正確な白い円形領域を見つける方法は? Pythonの高解像度画像の処理を最適化して、正確な白い円形領域を見つける方法は? Apr 01, 2025 pm 06:12 PM

    白い領域を見つけるためにPythonで高解像度の画像を処理する方法は? 9000x7000ピクセルの高解像度画像の処理、2つの写真を正確に見つける方法...

    See all articles