当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。