RPA流程自动化流程,当遇到与时间相关的操作时,可以调用datetime库的一些方法进行处理。datetime是Python用于处理日期和时间的标准库。1.获取当前日期和时间先来看看如何获??取当前日期和时间:>>>fromdatetimeimportdatetime>>>now=datetime.now()>>>print(now)2019-11-2311:12:32.715604>>>print(type(now))注意datetime是一个模块,datetime模块还包含一个datetime类,就是通过fromdatetimeimportdatetime导入的datetime类.如果仅导入日期时间,则必须引用全名datetime.datetime。datetime.now()返回当前日期和时间,类型为datetime。2.获取指定的日期和时间指定某个日期和时间,我们直接使用参数构造一个datetime:>>>fromdatetimeimportdatetime>>>time=datetime(2008,8,8,8,8)#使用指定的Createdatetime>>>print(time)2008-08-0808:08:003,datetime转换为timestamp在计算机中,时间实际上是用数字表示的。我们称1970年1月1日00:00:00UTC+00:00时区的时刻为纪元时间,记录为0(1970年之前的时间戳为负数),当前时间为第相对于纪元时间的秒数,称为时间戳。可以认为:timestamp=0=1970-1-100:00:00UTC+0:00对应北京时间:timestamp=0=1970-1-108:00:00UTC+8:00即可看到timestamp的值与时区无关,因为时间戳一旦确定,它的UTC时间就确定了,换算成任何时区的时间也完全确定了,这就是为什么计算机存储的当前时间是用时间戳表示,因为世界各地的计算机的时间戳在任何时间点都是完全相同的(假设时间是经过校准的)。要将日期时间类型转换为时间戳,只需调用timestamp()方法:>>>fromdatetimeimportdatetime>>>time=datetime(2019,11,23,11,25)>>>time.timestamp()1574479500.0注意Python的时间戳是一个浮点数。如果有小数位,则小数位代表毫秒数。4.将时间戳转换为日期时间要将时间戳转换为日期时间,使用datetime提供的fromtimestamp()方法:>>>fromdatetimeimportdatetime>>>time=1574479500.0>>>print(datetime.fromtimestamp(time))2019-11-2311:25:00注意timestamp是浮点数,没有时区概念,datetime有时区。上面的转换是在时间戳和本地时间之间进行的。本地时间是指当前操作系统设置的时区。比如北京时区是东8区,那么本地时间:2019-11-2311:25:00其实就是UTC+8:00时区时间:2019-11-2311:25:00UTC+8:00和此时的格林威治时间与北京时间相差8小时,即UTC+0:00时区的时间应该是:2019-11-2303:25:00UTC+0:00timestamp也可以直接转换成时区的UTC标准时间:>>>fromdatetimeimportdatetime>>>time=1574479500.0>>>print(datetime.fromtimestamp(time))2019-11-2311:25:00>>>print(datetime.utcfromtimestamp(time))#UTC时间2019-11-2303:25:005,将str转为datetime很多时候,用户输入的日期时间都是字符串。要处理日期和时间,您必须先将str转换为datetime。转换方法通过datetime.strptime()实现,需要日期时间格式的字符串:>>>fromdatetimeimportdatetime>>>today=datetime.strptime('2019-11-2311:34:49','%Y-%m-%d%H:%M:%S')>>>print(today)2019-11-2311:34:49>>>String'%Y-%m-%d%H:%M:%S'指定日期和时间部分的格式,注意转换后的日期时间没有时区信息。6.将datetime转换成str如果你已经有了一个datetime对象,如果你想把它格式化成一个字符串显示给用户,你需要把它转换成str。转换方式是通过strftime()实现的,同样需要一个日期时间格式String:>>>fromdatetimeimportdatetime>>>now=datetime.now()>>>print(now.strftime('%a,%b%d%H:%M'))11月23日星期六14:457。日期时间加减法日期和时间的加减法实际上就是向后或向前计算日期时间,得到一个新的日期时间。加减法可以直接使用+和-运算符,但是需要引入timedelta类:>>>fromdatetimeimportdatetime,timedelta>>>now=datetime.now()>>>nowdatetime.datetime(2019,11,23,14,49,49,739236)>>>现在+timedelta(小时=5)datetime.datetime(2019,11,23,19,49,49,739236)>>>现在-timedelta(天=1)日期时间。datetime(2019,11,22,14,49,49,739236)>>>现在-timedelta(days=3,hours=3)datetime.datetime(2019,11,20,11,49,49,739236)可见,使用timedelta你可以很容易地计算出前几天和后几天的时刻。8.将本地时间转换为UTC时间本地时间是指系统设置的时区时间,例如北京时间是UTC+8:00时区的时间,而UTC时间是指北京时间UTC+0:00时区。一个datetime类型有一个时区属性tzinfo,但是默认是None,所以无法区分这个datetime是在哪个时区,除非强制给datetime设置一个时区:>>>fromdatetimeimportdatetime,timedelta,timezone>>>time_utc=timezone(timedelta(hours=8))#创建时区UTC+8:00>>>now=datetime.now()>>>nowdatetime.datetime(2019,11,23,14,55,5,901745)>>>now_utc=now.replace(tzinfo=time_utc)#强制设置为UTC+8:00>>>now_utcdatetime.datetime(2019,11,23,14,55,5,901745,tzinfo=datetime.timezone(datetime.timedelta(0,28800)))如果系统时区恰好是UTC+8:00,那么上面的代码是正确的,否则不能强制时区为UTC+8:00。9、时区转换可以先通过utcnow()获取当前UTC时间,再转换为任意时区时间:>>>utc_time=datetime.utcnow().replace(tzinfo=timezone.utc)#获取UTCtime,并强制设置时区为UTC+0:00>>>print(utc_time)2019-11-2307:05:25.865221+00:00>>>>>>bj_time=utc_time.astimezone(timezone(timedelta(hours=9)))#astimezone()将时区转换为东京时间>>>print(bj_time)2019-11-2316:05:25.865221+09:00>>>>>>dj_time=utc_time.astimezone(timezone(timedelta(hours=9)))#将时区转换为东京时间>>>print(dj_time)2019-11-2316:05:25.865221+09:00>>>>>>dj_time2=bj_time.astimezone(timezone(timedelta(hours=9)))#北京时间转东京时间>>>print(dj_time2)2019-11-2316:05:25.865221+09:00时区转换的关键是当你得到一个日期时间时,你需要知道它的正确时区,然后强制将时区设置为基准时间。使用带时区的日期时间,通过astimezone()方法,您可以转换为任何时区。注意:UTC+0:00时区不需要转换成其他时区,任何带时区的datetime都可以正确转换,比如上面的bj_time转换成dj_time2。总结datetime表示的时间需要时区信息来确定具体的时间,否则只能视为本地时间。如果要存储datetime,最好的方法是将其转化为timestamp再存储,因为timestamp的值是完全独立于时区的。免费下载试用:https://support.i-search.com.cn/