ホームページ >システムチュートリアル >Linux >Python の時間処理の完全な概要
2.時間モジュールから始めましょう
時間モジュールを学習するには、まず時間に関連するいくつかの概念を知る必要があります: (1)エポック 時間を 1,000,000 ミリ秒などのミリ秒数で表現したいとします。その場合、解決しなければならない問題があります。この 1,000,000 ミリ秒の開始点、つまり時間基準点はどこでしょうか?たとえば、あなたの身長が 1.8 メートルであると言う場合、この高さはあなたが立っている地面を指します。この時刻の基準点はエポックであり、Unix システムでは、この基準点は 1970 年 1 月 1 日の 0:00 の時点です。 (2)GMT、UTC エポックは 1970 年の開始点を表すと上で述べましたが、この 1970 年はどの基準時間と相対的なのでしょうか?一般に、これはグリニッジ標準時を基準としたものであり、GMT (グリニッジ標準時) 時間とも呼ばれ、UTC (協定世界時) とも呼ばれます。なぜ時間基準に 2 つの名前があるのでしょうか?歴史的には、GMT が最初で、次に UTC が使用されました。UTC は現在使用されている時間標準であり、GMT は古い時間測定標準です。 UTC は原子時計に基づいて時間を計算しますが、GMT は地球の自転と公転に基づいて時間を計算します。
したがって、UTC は実際の基準時間と考えることができ、UTC からの GMT の偏差は 0 です。
実際には、私たちのコンピュータにはリアルタイムで UTC 時間を記録するハードウェア モジュール RCT が搭載されています。このモジュールは別のバッテリから電力を供給されており、電源がオフになっていても影響を受けません。
エポックの時間基準と UTC の基準を使用して、時間を正確に表すことができます。
(3)夏時間、ゾーン 時刻を正確に表すことはできますが、多くの場合、地域の実情に応じて時刻を調整する必要があります。最も一般的なのはタイム ゾーン (tzone) であり、これは誰もがよく知っていると思います。現時点で、5:05 という時刻を言う場合、時刻を正確に表すには、どのタイムゾーンの 5:05 を追加する必要があります。
もう 1 つの時間調整は DST です。
DST は Daylight Saving Time の略で、太陽光を最大限に活用し電力消費を削減するために、さまざまな国や地域の政策や規制に応じて時間を人為的に調整することを意味します。たとえば、冬は7時に起きますが、夏は6時に起きると、夏になると人為的に時間が1時間加算され、まだ起きていると思わせることができます。 7時ですが、実際には1時間早いです。
それでは、興味のある人は、Python が tzone と DST の値をどのようにして知るのかを尋ねる必要があります。答えは環境変数を通じて得られます。
ここでは、説明のための例として Linux のみを使用します。
Linux には TZ 環境変数があり、その値は次のようなものです:
CST 08EDT、M4.1.0、M10.5.0、この文字列は次のように解釈できます。スペースで区切って 3 つの部分に分けます
CST 08 EDT、M4.1.0、M10.5.0
最初の部分の CST は、タイム ゾーンの名前を表します。これは、中国標準時であり、いわゆる北京時間です。8 は、北京時間に UTC 時間である 8 時間を加えたものを表します。
2 番目の部分 EDT は DST の名前を表します。DST はさまざまな国や地域の政策や規制により異なると言われています。EDT の後に CST のような時間調整値を続けることもできますが、我が国でのみ使用されているため、 1986 年に夏時間は 1992 年に一時期実施されましたが、現在は廃止されているため、後から調整時間を追加する必要はありません。
3 番目の部分は、DST の実施の開始時刻と終了時刻を表すため、詳細な説明は省略します。
(4) 時間の表現、取得、変換time モジュールで時間を取得する基本的な方法は次のとおりです。 リーリー
UTC 時間を使用して、エポックから現在までの秒数 (浮動小数点数で表現) を返します。この秒数を年、月、日、時、分、秒の形式に変換したいのは当然のことですが、この変換は 2 つのタイプに分けられます。1 つは依然として UTC 時間を使用し、もう 1 つは UTC 時間を使用します。私たちのタイムゾーンで調整された時刻。
time モジュールは 2 つのメソッドを提供します。
リーリー
両方とも、次の属性を持つクラス struct_time のインスタンスを返します。時間を秒単位で表すよりも、この表現の方が理解しやすいです。
これら 2 つの関数がパラメータを渡さずに呼び出された場合、内部で time.time() が呼び出され、返された秒数が変換に使用されます。
逆に、Python には、これら 2 つの struct_time を秒に変換するメソッドも提供されています。
calendar.timegm() メソッドは、UTC の struct_time (gmtime の戻りオブジェクト) をエポックからの秒数に変換するために使用されます
time.mktime() は、タイムゾーンで調整された struct_time (つまり、localtime の戻りオブジェクト) オブジェクトをエポックからの秒数に変換するために使用されます
つまり、mktime メソッドはまずシステム内のタイムゾーンと DST 情報を見つけ、この情報を使用して struct_time を調整し、それを秒に変換します。
もう 1 つの一般的なニーズは、時刻と時刻を表す文字列の間で変換することです。
time モジュールの Strftime と strptime がこれに使用されます。
名前を見ればその意味がわかるはずです。
strftime は文字列形式の時間であり、時間を文字列にフォーマットするために使用されます
strptime は文字列解析時間であり、文字列を時間に解析するために使用されます。
ここでの時間はすべて struct_time オブジェクトであることに注意してください。
時刻のフォーマット方法については、非常に簡単な知識ですが、ここでは公式サイトのドキュメントから内容をお借りします。
これら 2 つの関数に加えて、time モジュールには時間を文字列に変換するのに役立つ 2 つの便利なメソッドも用意されています
asctime は、次に示すように、struct_time オブジェクトを標準の 24 文字の文字列に変換するために使用されます。
1993年6月20日(日)23時21分05秒ctime メソッドは、秒を受け取ることを除いて、asctime と同じ機能を持っています。内部的には、最初に秒を localtime を介して struct_time に変換し、その後、asctime と同じになります。
上記は時間モジュールの中心的な内容です。これらの API を覚えやすくするために数式を使用してみます
リーリー
次に、datetime モジュールの学習を開始します。3.日時モジュール
######(1。概要######
time モジュールは時間を取得して表現するという問題を解決し、datetime モジュールはさらに年、月、日、時、分、秒の時間情報を迅速に取得して操作するという問題を解決します。 簡単に言うと、このモジュールには 3 つのコア クラスがあります。date クラスは年、月、日を表し、time クラスは時、分、秒、ミリ秒を表します。時刻と混同しないでください。ここのモジュール。ジングルはこの状況を思い出すのに役立ちます: 時間がありません 日時で隠されています編集が悪いのか?まあ、私もそう思います。
datetime クラスは日付と時刻の組み合わせです。
事前に説明しておく必要があるのは、time クラスと datetime クラスの両方に属性があり、その値は tzinfo オブジェクトであり、その値には時刻または日時のタイムゾーン情報が含まれます。この時刻または日時オブジェクトは認識されており、エポックからの秒数に正確に変換できます。
このプロパティが None に設定されている場合、time オブジェクトまたは datetime オブジェクトにはタイムゾーン情報がありません。具体的には、それが現地時間を表すか、utc 時間を表すかは、プログラム内で自分で決定する必要があります。
ここで話している現地時間はタイムゾーンの時間を指し、utc 時間は国際標準時間であるグリニッジ時間を指します。以下同様。
日付にはタイムゾーン情報がないことに注意してください。
(2)从创建datetime开始
创建datetime对象,我最常用的办法如下
dt=datetime.datetime.fromtimestamp(time.time())
以上,time.time()获得自epoch开始的秒数,fromtimestamp方法会将这个秒数转变成一个datetime对象。
这里有一个问题,这个datetime对象究竟是utc的还是local的?
答案是local的,这是该方法的默认行为。如果你在fromtimestamp方法中传入一个表示时区的参数,即tzinfo对象,就会按传入的时区信息进行转换。
获得表示当前local时间的datetime对象,还有两个简便方法
datetime. datetime. now() datetime. datetime. today()
以上我们得到的都是local的datetime对象,如何获得utc的datetime对象呢?有两个办法
datetime. datetime. utcfromtimestamp() datetime. datetime. utcnow()
我们还可以从字符串中创建datetime对象,
其内部还是先调用的time模块中的striptime方法,获取struct_time对象,再利用struct_time对象中的年月日时分秒信息构建datetime对象。
同样的,datetime类也提供了strftime(),asctime(),ctime()方法,相信不说你也知道是做什么的了。
datetime类还提供了一个combine方法,用来将一个date对象和一个time对象组合成一个datetime对象。
需要注意的是,datetime模块中出现timestamp时,一般可将其理解成time.time()返回的秒数
(3)date和time的创建date对象的创建和datetime非常相似,
datetime. date. today()
datetime.date.fromtimestamp()都可以创建一个date对象。
当然,你也可以通过构造方法传入年月日来创建date对象。
相比之下,time对象的创建就很有限,只能通过
datetime.time([hour[, minute[, second[, microsecond[, tzinfo]]]]])
这个方法创建。
(4)以上三个对象的操作和timedelta类在实际使用中,我们有一大块需求就是对日期进行比较和加减运算。得益于python的操作符重载能力,python中可以方便地对
date对象之间,或者datetime对象之间进行小于(
注意,这里仅限于同类对象之间,而且,不包括time对象之间。
两个date对象作减,或者两个datetime对象之间作减,差值用一个timedelta对象表示。
同理,一个date 对象或者datetime对象也可以加或者减一个timedelta对象。
一个timedelta对象含有三个属性:days,seconds, microseconds,days属性可以取负值,另外两个属性都只能是正值。
你可以用total_seconds()方法获得一个timedelta对象的秒数表示。
两个timedelta对象之间可加,可减,但不能做大小比较,因为这样没什么意义。
一个timedelta对象还可以与整数相乘,或通过//操作与一个整数相除。
还可以取反,或者用abs函数获得绝对值
4.无总结,不进步本文的目的不在于详细说明python处理时间日期的api如何使用,而是想通过一个概览的形式,让大家抓住time和datetime模块的设计结构,从而能够清楚这些模块提供了哪些能力,在需要的时候能够想起来去用,至于查详细的api,应该是可以轻松解决的。
以上がPython の時間処理の完全な概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。