當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Zulu用法及代碼示例


Zulu 是本機日期時間的drop-in-replacement。在此,所有 DateTime 對象都轉換為 UTC 並存儲為 UTC。 UTC 和時區之間有一個輪廓。因此,時區表示僅適用於轉換為原始日期時間。它支持使用 strptime strftime 指令和 Unicode 日期模式的多種字符串格式。

安裝

要安裝此模塊,請在終端中鍵入以下命令。

pip install zulu

Zulu 模塊的類

  • 祖魯語.祖魯語:Zulu 類用於表示不可變的 UTC DateTime 對象。提供給它的任何時區信息都將從時區轉換為 UTC。如果沒有給出時區信息,則假定 DateTime 是 UTC 值。所有類型的算術都在基本 UTC DateTime 對象上執行。在這方麵,祖魯語沒有改變時區的概念。盡管如此,僅當 Zulu 對象格式化為字符串時才會發生本地化。

    函數或類方法

    1. now():- 它返回當前 UTC 日期和時間作為 Zulu 對象。

    
    import zulu 
      
      
    dt = zulu.now() 
    print("Today date and time is:", dt) 

    輸出:

    Today date and time is: 2020-04-17T16:10:15.708064+00:00

    2. parse(obj, format=None, default_tz=None):- 默認情況下它將查找 ISO8601 格式的字符串或 POSIX 時間戳。如果沒有給出時區,則假設 UTC 時區。它從 obj 返回 Zulu 對象解析。

    
    import zulu 
      
      
    print("Zulu object when timezone is passed:", 
          zulu.parse('2020-04-17T16:10:15.708064+00:00')) 
      
    print("Zulu object when only date is passed:",  
          zulu.parse('2020-04-17')) 
      
    print("Zulu object when date and time is passed:", 
          zulu.parse('2020-04-17 16:10')) 
      
    print("Zulu object when ISO8601 is passed as formats:", 
          zulu.parse('2020-04-17T16:10:15.708064+00:00', 
                     zulu.ISO8601)) 
      
    print("Zulu object when Default timezone is used :",  
          zulu.parse('2020-04-17',  
                     default_tz ='US/Eastern')) 

    輸出:

    Zulu object when timezone is passed: 2020-04-17T16:10:15.708064+00:00
    Zulu object when only date is passed: 2020-04-17T00:00:00+00:00
    Zulu object when date and time is passed: 2020-04-17T16:10:00+00:00
    Zulu object when ISO8601 is passed as formats: 2020-04-17T16:10:15.708064+00:00
    Zulu object when Default timezone is used : 2020-04-17T04:00:00+00:00

    3. format(format=None, tz=None, locale=’en_US_POSIX’):使用字符串format的格式返回字符串日期時間。同時可選地首先轉換為時區 tz。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064+00:00') 
      
    print("The Datetime string without timezone is:",  
          dt.format('% m/% d/% y % H:% M:% S % z')) 
      
    print("The Datetime string without timezone is:",  
          dt.format('MM / dd / YY HH:mm:ss Z')) 
      
    print("The Datetime string when timezone is given  is:", 
          dt.format('% Y-% m-% d % H:% M:% S % z',  
                    tz ='US/Eastern')) 
      
    print("The Datetime string when timezone is given as local is:",  
          dt.format('%Y-%m-%d %H:%M:%S %z',  
                    tz ='local')) 

    輸出:

    The Datetime string without timezone is: 04/17/20 16:10:15 +0000
    The Datetime string without timezone is: 04/17/20 16:10:15 +0000
    The Datetime string when timezone is given is: 2020-04-17 12:10:15-0400
    The Datetime string when timezone is given as local is: 2020-04-17 21:40:15+0530

    4. range(frame, start, end):Zulu 實例的範圍從 start 到 end 並以給定時間範圍為步長返回。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064+00:00') 
      
    range1 = list(zulu.range('hour', dt,  
                             dt.shift(hours = 4))) 
    range2 = list(zulu.range('minute', dt,  
                             dt.shift(minutes = 4))) 
      
    print("The range when time frame is in hour:",  
          range1) 
    print("The range when time frame is in minute:", 
          range2) 

    輸出:

    The range when time frame is in hour: [<Zulu [2020-04-17T16:10:15.708064+00:00]>,
    <Zulu [2020-04-17T17:10:15.708064+00:00]>,
    <Zulu [2020-04-17T18:10:15.708064+00:00]>,
    <Zulu [2020-04-17T19:10:15.708064+00:00]>]
    The range when time frame is in minute: [<Zulu [2020-04-17T16:10:15.708064+00:00]>,
    <Zulu [2020-04-17T16:11:15.708064+00:00]>,
    <Zulu [2020-04-17T16:12:15.708064+00:00]>,
    <Zulu [2020-04-17T16:13:15.708064+00:00]>]

    5.shift(other=None,years=0,months=0,weeks=0,days=0,hours=0,mins=0,secs=0,microseconds=0):它可以使用向前或向後移動日期時間從傳遞的參數創建一個時間增量,並返回一個新的 Zulu 實例。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064+00:00') 
    shifted1 = dt.shift(hours =-5, minutes = 10) 
      
    print("The shifted time is:", shifted1) 
      
    shifted2 = dt.shift(minutes = 55, seconds = 11, 
                        microseconds = 10) 
    print("The new shifted time is:", shifted2) 

    輸出:

    The shifted time is: 2020-04-17T11:20:15.708064+00:00
    The new shifted time is: 2020-04-17T17:05:26.708074+00:00
    

    6. add(other=None, 年=0, 月=0, 周=0, 天=0, 小時=0, 分鍾=0, 秒=0, 微秒=0):它使用從創建的 timedelta 添加時間傳遞參數並返回一個新的 Zulu 實例。第一個參數是“timedelta”或“dateutil.relativedelta”對象,在這種情況下,其他參數將被忽略,並在此日期時間對象中添加。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064+00:00') 
      
    shifted = dt.add(minutes = 5) 
    print("The new shifted time zone is :", shifted) 

    輸出:

    The new shifted time zone is : 2020-04-17T16:15:15.708064+00:00

    7.減去(其他=無,年= 0,月= 0,周= 0,天= 0,小時= 0,分鍾= 0,秒= 0,微秒= 0):它使用從創建的時間增量減去時間傳遞參數並返回一個新的 Zulu 實例。 Zulu、datetime、timedelta 或 dateutil.relativedelta 對象可以作為第一個參數,在這種情況下,其他參數將被忽略,並在此 datetime 對象中被減去。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064+00:00') 
    shifted1 = dt.subtract(hours = 5) 
    shifted2 = dt.subtract(hours = 9).add(minutes = 56) 
      
    print("The new shifted timezone is:", shifted1) 
    print("The new shifted timezone using both add\ 
     and subtract is:", shifted2) 

    輸出:

    The new shifted timezone is: 2020-04-17T11:10:15.708064+00:00
    The new shifted timezone using both add and subtract is: 2020-04-17T08:06:15.708064+00:00

    8.替換(年=無,月=無,日=無,小時=無,分鍾=無,秒=無,微秒=無,tzinfo=無,*,折疊=無):它替換日期時間屬性並返回一個新的 Zulu 實例。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064+00:00') 
      
    replaced1 = dt.replace(day = 23, hour = 15) 
    print("Replaced time is:", replaced1) 
      
    replaced2 = dt.replace(minute = 10, second = 11, 
                           microsecond = 18) 
    print("The new replaced time is:", replaced2) 

    輸出:

    Replaced time is: 2020-04-23T15:10:15.708064+00:00
    The new replaced time is: 2020-04-17T16:10:11.000018+00:00

    9.copy():它返回一個新的“Zulu”實例,但具有相同的日期時間值。
    返回
    祖魯語

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064 + 00:00') 
    print("The copied datetime is:", dt.copy()) 

    輸出:

    The copied datetime is: 2020-04-17T16:10:15.708064+00:00

    因為祖魯語是不可變的。因此,移位、替換和複製會在更改原始實例的同時返回新的 Zulu 實例。

    10. span(frame, count=1):返回兩個新的 Zulu 對象,與該對象和給定時間範圍之間的時間跨度相關。默認情況下,正在跨越的幀數為 1。它返回一個元組(start_of_frame,end_of_frame)。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064 + 00:00') 
      
    print("The span of a century:", dt.span('century')) 
    print("The span of a month:", dt.span('month')) 
    print("The span of a day:", dt.span('day')) 
    print("The span of a decade:", dt.span('decade')) 
    print("The span of a century with given count is:", 
           dt.span('century', count = 3)) 

    輸出:

    The span of a century: (<Zulu [2000-01-01T00:00:00+00:00]>, <Zulu [2099-12-31T23:59:59.999999+00:00]>)
    The span of a month: (<Zulu [2020-04-01T00:00:00+00:00]>, <Zulu [2020-04-30T23:59:59.999999+00:00]>)
    The span of a day: (<Zulu [2020-04-17T00:00:00+00:00]>, <Zulu [2020-04-17T23:59:59.999999+00:00]>)
    The span of a decade: (<Zulu [2020-01-01T00:00:00+00:00]>, <Zulu [2029-12-31T23:59:59.999999+00:00]>)
    The span of a century with given count is: (<Zulu [2000-01-01T00:00:00+00:00]>, <Zulu [2299-12-31T23:59:59.999999+00:00]>)

    11. span_range(frame, start, end):返回給定時間幀的步驟中從給定開始到結束的時間跨度範圍。

    
    import zulu 
      
      
    start = zulu.parse('2020-04-17T16:10:15.708064+00:00') 
    end = zulu.parse('2020-04-17T22:10:15.708064+00:00') 
      
    for span in zulu.span_range('hour', start, end): 
        print(span) 

    輸出:

    (<Zulu [2020-04-17T16:00:00+00:00]>, <Zulu [2020-04-17T16:59:59.999999+00:00]>)
    (<Zulu [2020-04-17T17:00:00+00:00]>, <Zulu [2020-04-17T17:59:59.999999+00:00]>)
    (<Zulu [2020-04-17T18:00:00+00:00]>, <Zulu [2020-04-17T18:59:59.999999+00:00]>)
    (<Zulu [2020-04-17T19:00:00+00:00]>, <Zulu [2020-04-17T19:59:59.999999+00:00]>)
    (<Zulu [2020-04-17T20:00:00+00:00]>, <Zulu [2020-04-17T20:59:59.999999+00:00]>)
    (<Zulu [2020-04-17T21:00:00+00:00]>, <Zulu [2020-04-17T21:59:59.999999+00:00]>)

    12. start_of(frame):對於此日期時間,它返回給定時間範圍 f 的開始時間。

    13. start_of_day():對於這個日期時間,它返回一個新的 Zulu 對象/設置為一天的開始。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064 + 00:00') 
    print("The start of month is:", dt.start_of('month')) 
    print("The start of day is:", dt.start_of_day()) 

    輸出:

    The start of month is: 2020-04-01T00:00:00+00:00
    The start of day is: 2020-04-17T00:00:00+00:00
    

    其他start_of 函數有:

    函數名稱 說明
    start_of_century() 返回此日期時間到本世紀初的新祖魯語集。
    start_of_decade() 返回此日期時間到十年之初的新祖魯語集。
    start_of_hour() 返回此日期時間到一小時開始的新 Zulu 集。
    start_of_minute() 返回此日期時間到分鍾開始處的新 Zulu 集。
    start_of_month() 返回此日期時間到月初的新 Zulu 集。
    start_of_second() 返回此日期時間到第二秒開始的新 Zulu 集。
    start_of_year() 返回此日期時間到年初的新 Zulu 集。

    14. end_of(frame, count=1):對於此日期時間,它返回給定時間幀 f 的結束時間。默認情況下,正在跨越的幀數為 1。

    15.end_of_day(計數=1):對於這個日期時間,它返回一個新的 Zulu 對象/設置為當天結束。
    默認情況下,正在跨越的幀數為 1。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064+00:00') 
      
    print("The end of month is:", dt.end_of('month', 1)) 
    print("The end of day is without count:", dt.end_of_day()) 
    print("The end of day is with the count of 2:", dt.end_of_day(2)) 

    輸出:

    The end of month is: 2020-04-30T23:59:59.999999+00:00
    The end of day is without count: 2020-04-17T23:59:59.999999+00:00
    The end of day is with the count of 2: 2020-04-18T23:59:59.999999+00:00

    其他end_of 函數有:

    函數名稱 說明
    end_of_century(計數=1) 返回此日期時間到本世紀末的新祖魯語集。
    end_of_decade(計數=1) 返回此日期時間到十年末的新祖魯語集。
    end_of_hour(計數=1) 返回此日期時間到一小時結束時的新 Zulu 集。
    end_of_minute(計數=1) 返回此日期時間到分鍾結束時的新 Zulu 集。
    end_of_month(計數=1) 返回此日期時間到月底的新 Zulu 集。
    end_of_second(計數=1) 返回此日期時間到第二秒結束時的新 Zulu 集。
    end_of_year(計數=1) 返回此日期時間到年底的新 Zulu 集。

    16.time_from(dt,**選項):它返回“time ago”中這個給定日期時間與另一個給定日期時間之間的差異。
    參數

    • dtime - 日期時間對象。
    • 返回
      str

    17. time_from_now(**options):返回“time ago”中這一次與現在的差異。

    18. time_to(dt, **options):返回此日期時間與“time to”中另一個日期時間之間的差異。

    19. time_to_now(**options):返回此日期時間與“time to”中現在的日期時間之間的差異。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064+00:00') 
      
    print("The difference between this time and end of the day is:", 
          dt.time_from(dt.end_of_day())) 
    print("The difference between this time and end of the day is:", 
          dt.time_to(dt.end_of_day())) 
    print("The difference between this time and start of the day is:", 
          dt.time_from(dt.start_of_day())) 
    print("The difference between this time and start of the day is:", 
          dt.time_to(dt.start_of_day())) 
      
    print("The difference is", dt.time_from_now()) 
    print("The difference is", dt.time_to_now()) 

    輸出:

    The difference between this time and end of the day is: 8 hours ago
    The difference between this time and end of the day is: in 8 hours
    The difference between this time and start of the day is: in 16 hours
    The difference between this time and start of the day is: 16 hours ago
    The difference is 2 days ago
    The difference is in 2 days

    20. astimezone(tz=’local’):返回轉移到給定時區的本機日期時間對象。默認時區是本地時區。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064 + 00:00') 
    local = dt.astimezone() 
      
    print("Local timezone is", local) 
      
    pacific = dt.astimezone('US / Pacific') 
    print("Pacific timezone is:", pacific) 

    輸出:

    Local timezone is 2020-04-17 21:40:15.708064+05:30
    Pacific timezone is: 2020-04-17 09:10:15.708064-07:00

    21.timetuple():返回時間元組。

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064 + 00:00') 
    print("The timetuple is:", dt.timetuple()) 

    OUTPUT

    The timetuple is: time.struct_time(tm_year=2020, tm_mon=4, tm_mday=17, tm_hour=16, tm_min=10, tm_sec=15, tm_wday=4, tm_yday=108, tm_isdst=-1)

    22.utcnow():返回當前UTC日期和時間。

    23.utcoffset():返回特定地點與相應世界時間的時、分、秒差。

    24. utctimetuple():返回與時間協調的UTC時間元組。localtime()

    
    import zulu 
      
      
    dt = zulu.parse('2020-04-17T16:10:15.708064 + 00:00') 
      
    print("The current UTC datetime is:", dt.utcnow()) 
    print("The utcoffest is:", dt.utcoffset()) 
    print("The utctimetuple is:", dt.utctimetuple()) 

    輸出:

    The current UTC datetime is: 2020-04-19T07:17:30.162600+00:00
    The utcoffest is: 0:00:00
    The utctimetuple is: time.struct_time(tm_year=2020, tm_mon=4, tm_mday=17, tm_hour=16, tm_min=10, tm_sec=15, tm_wday=4, tm_yday=108, tm_isdst=0)

    該類中的其他函數是:

    函數名稱 說明
    ctime() 返回 ctime() 樣式字符串。
    date() 返回一個日期對象,但具有相同的年、月、日且順序相同。
    datetime 返回本機日期時間對象。
    datetimetuple() 返回一個日期時間元組,其中包含年、月、日、小時、分鍾、秒、微秒、tzoneinfo。
    datetuple() 返回包含年、月、日的日期元組。
    days_in_month() 返回該月的總天數
    dst() 返回夏令時
    is_after(other) 返回此日期時間是否在其他日期時間之後
    is_before(other) 返回此日期時間是否早於其他日期時間
    is_between(start, end) 返回此日期時間是否在開始和結束之間(包括開始和結束)
    is_leap_year() 返回此日期時間的年份是否為閏年。
    is_on_or_after(other) 返回此日期時間是否在其他日期時間之前或之後
    is_on_or_before(other) 返回此日期時間是否在其他日期時間之前或之前
    isocalendar() 返回包含 ISO 年份、周數和工作日的三元組
    isoformat() 返回 ISO 8601 格式的字符串,即 YYYY-MM-DDTHH:MM:SS[.mmmmmm][+HH:MM]。
    isoweekday() 返回日期代表的星期幾星期一 == 1,星期二 == 2.. 。周日==7
    naive 返回本機日期時間對象。
    strftime() 返回格式 - strftime() 樣式字符串。
    strptime() 返回字符串,格式 - 從字符串解析的新日期時間。
    time() 返回具有相同時間但 timezoneinfo=None 的時間對象
    timetz() 返回一個時間對象,但具有相同的時間和時區信息。
    today() 返回當前日期或日期時間。
    toordinal() 返回預推儒略/格裏高利序數。
    tzname() 返回與日期時間對象關聯的時區名稱。
    utcfromtimestamp(timestamp) 從 POSIX 時間戳返回 Zulu 對象。
    weekday() 返回日期所代表的星期幾。星期一 == 0,星期二 == 1.. 。周日==6
    fromdatetime(dt) 從本機日期時間對象返回 Zulu 對象。
    fromgmtime(struct) 從像 time.gmtime 返回的元組返回 Zulu 對象,它表示 UTC 日期時間。
    fromlocaltime(struct) 從像 time.localtime 返回的元組返回 Zulu 對象,它表示本地日期時間。
    fromordinal(ordinal) 從預推朱利安/格裏高利序數返回祖魯語對象。
    fromtimestamp(時間戳, tz=tzutc()) 從 POSIX 時間戳返回 Zulu 對象。
  • 祖魯三角洲:-
    它是 datetime.timedelta 的擴展版本,提供了新函數。

    函數或類方法

    1. parse_delta(obj):返回從給定的obj解析的Delta對象。

    
    import zulu 
      
      
    delta1 = zulu.parse_delta('4h 45m') 
    delta2 = zulu.parse_delta('-4h 45m') 
      
    print("The delta is:", delta1) 
    print("The delta is:", delta2) 

    輸出:

    The delta is: 4:45:00
    The delta is: -1 day, 19:15:00
    

    2.格式(格式='長',粒度='秒',閾值=0.85,add_direction=False,區域設置=無):以格式化字符串形式返回 timedelta。

    
    import zulu 
      
      
    delta = zulu.parse_delta('4h 45m') 
      
    print("The timedelta with given granularity is:",  
          delta.format(granularity ='day')) 
      
    print("The timedelta with given locale is:", 
          delta.format(locale ='de')) 
      
    print("The timedelta with given locale and add_direction is:", 
          delta.format(locale ='fr', add_direction = True)) 
      
    print("The timedelta with given threshold is:",  
          delta.format(threshold = 5)) 
      
    print("The timedelta with given threshold and granularity is:",  
          delta.format(threshold = 155, granularity ='minute')) 

    輸出:

    The timedelta with given granularity is: 1 day
    The timedelta with given locale is: 5 Stunden
    The timedelta with given locale and add_direction is: dans 5 heures
    The timedelta with given threshold is: 285 minutes
    The timedelta with given threshold and granularity is: 285 minutes

    3. fromtimedelta(delta):從原生 timedelta 對象返回 Delta 對象。

    
    import zulu 
      
      
    delta = zulu.parse_delta('4h 45m') 
    delta1 = zulu.parse_delta('6h 42m 11s') 
      
    print("The timedelta is:", delta.fromtimedelta(delta1)) 

    輸出:

    The timedelta is: 6:42:11
    
    • zulu.ParseError:-
      當對象無法解析為日期時間時,它會引發異常。

相關用法


注:本文由純淨天空篩選整理自nishthagoel712大神的英文原創作品 Zulu module in Python。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。