python - الشارقة - توقيت دبي والسعودية




كيفية الحصول على الوقت الحالي في بيثون (20)

كيف يمكنني الحصول على الوقت الحالي في بيثون؟

الوحدة time

توفر الوحدة time الوظائف التي تخبرنا بالوقت في "الثواني منذ الحقبة" بالإضافة إلى الأدوات المساعدة الأخرى.

import time

يونيكس عهد الزمن

هذا هو الشكل الذي يجب أن تحصل عليه من الطوابع الزمنية في الحفظ في قواعد البيانات. وهو رقم نقطة عائم بسيط يمكن تحويله إلى عدد صحيح. كما أنه جيد للحساب في ثوان ، لأنه يمثل عدد الثواني منذ 1 يناير 1970 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

يمكنك الحصول على كائن تاريخ / وقت في وقت 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 و UTC حسب التوقيت الصيفي ، قد يتحول مستخدموها إلى مناطق زمنية أخرى ، مثل التوقيت الصيفي البريطاني ، خلال فصل الصيف.)

المنطقة الزمنية datetime علم

ومع ذلك ، لا يمكن تحويل أي من كائنات التاريخ والوقت التي أنشأناها حتى الآن بسهولة إلى مناطق زمنية مختلفة. يمكننا حل هذه المشكلة مع وحدة pytz :

>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)

بالمثل ، في Python 3 لدينا فئة timezone مع مثيل timecone utc المرفق ، مما يجعل المنطقة الزمنية مدركة pytz (ولكن يتم التحويل إلى منطقة زمنية أخرى بدون وحدة 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

يمكنك أيضًا إنشاء كائن datetime ساذج على دراية بطريقة تحديد pytz المنطقة الزمنية 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 بأن نجعل كائنات الوقت pytz بنا على دراية وتحويل الوقت إلى مئات المناطق الزمنية المتوفرة في وحدة pytz .

يمكن للمرء أن يقوم بتسلسل هذا الكائن في وقت متزامن لتوقيت UTC وتخزينه في قاعدة بيانات ، ولكنه يتطلب ذاكرة أكبر بكثير ويكون أكثر عرضة للخطأ من مجرد تخزين وقت Unix Epoch ، الذي أظهرته أولاً.

الطرق الأخرى لأوقات العرض أكثر عرضة للخطأ ، خاصة عند التعامل مع البيانات التي قد تأتي من مناطق زمنية مختلفة. أنت تريد أن يكون هناك أي ارتباك لأي المنطقة الزمنية المقصود سلسلة أو كائن تاريخي متسلسل.

إذا كنت تعرض الوقت مع بايثون للمستخدم ، فإن ctime يعمل بشكل جيد ، وليس في جدول (عادة لا يكون جيدًا) ، ولكن ربما في الساعة. ومع ذلك ، أنا شخصيا أوصي ، عند التعامل مع الوقت في بيثون ، إما باستخدام وقت يونكس ، أو معرفة التوقيت العالمي كائن datetime .

ما هي الوحدة / الطريقة المستخدمة للحصول على الوقت الحالي؟


أريد الحصول على الوقت بالمللي ثانية. طريقة بسيطة للحصول عليها:

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)

أولاً استيراد الوحدة 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 () إلى سلسلة ينتج إجابة بتنسيق يشبه DATES AND TIMES العادية التي اعتدنا عليها.


إذا كنت بحاجة إلى الوقت الحالي ككائن time :

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

إذا كنت تستخدم 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'))

إرجاع datetime.now() الوقت الحالي ككائن datetime ساذجة يمثل الوقت في المنطقة الزمنية المحلية. قد تكون تلك القيمة غامضة ، على سبيل المثال ، أثناء التحولات DST ("fall back"). لتجنب الغموض يجب استخدام المنطقة الزمنية 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

باستخدام 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

بسيطة وسهلة:

باستخدام وحدة 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

جرب وحدة الأسهم من 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'

جميع الاقتراحات الجيدة ، ولكن أجد أنه من الأسهل استخدام ctime() بنفسي:

In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'

هذا يعطي تمثيل سلسلة منسقة بشكل جيد من الوقت المحلي الحالي.


فعل

from time import time

t = time()
  • t - عدد عائم ، جيد لقياس الفاصل الزمني.

هناك بعض الاختلاف في الأنظمة الأساسية لـ Unix و Windows.


لا يحتاج هذا السؤال إلى إجابة جديدة لمجرد أنها ... لعبة / وحدة جديدة لامعة ، ومع ذلك ، ما يكفي من التبرير. أن تكون مكتبة البندول ، التي يبدو أنها تقوم بأشياء من هذا النوع حاول السهم ، إلا من دون العيوب المتأصلة والبق التي تحدق السهم.

على سبيل المثال ، الإجابة على السؤال الأصلي:

>>> import pendulum
>>> print(pendulum.now())
2018-08-14T05:29:28.315802+10:00
>>> print(pendulum.utcnow())
2018-08-13T19:29:35.051023+00:00

هناك الكثير من المعايير التي تحتاج إلى معالجة ، بما في ذلك RFCs و ISOs متعددة ، للقلق. من أي وقت مضى الحصول عليها مختلطة. لا داعي للقلق ، وإلقاء نظرة قليلا في dir(pendulum.constants) هناك أكثر قليلا من تنسيقات RFC و ISO هناك ، على الرغم من.

عندما نقول المحلية ، على الرغم من ماذا نعني؟ حسناً ، أعني

>>> print(pendulum.now().timezone_name)
Australia/Melbourne
>>>

من المفترض أن معظم البقية تقصد مكان آخر.

وعلى ذلك يذهب. قصة قصيرة طويلة: يحاول بندول القيام به للتاريخ والوقت ما تطلبه HTTP. يجدر النظر ، وخاصة لسهولة الاستخدام والوثائق الشاملة.


ما يلي هو ما أستخدمه للحصول على الوقت دون الحاجة إلى تنسيق. بعض الناس لا يحبون طريقة الانقسام ، ولكنها مفيدة هنا:

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

ستتم طباعة بتنسيق HH: MM: SS.


هذا ما انتهى به الأمر مع:

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

كما يعتبر هذا الجدول مرجعًا ضروريًا لاختيار أكواد التنسيق المناسبة للحصول على التاريخ المنسق بالطريقة التي تريدها (من وثائق Python "datetime" here ).


يمكنك استخدام الوحدة 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]

>>> 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'] (المحدد الافتراضي هو space).

يتم استخدام الأقواس لتحديد "الوسيطة" المطلوبة في القائمة.

يجب على المرء فقط استدعاء سطر رمز واحد. لا ينبغي لأحد أن يطلق عليهم مثلما فعلت ، فهذا مجرد مثال ، لأنه في بعض الحالات ستحصل على قيم مختلفة ، حالات نادرة ولكنها ليست مستحيلة.


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