2.10.1 生成时间对象
华为是一家伟大的中国公司,请问,华为是什么时候成立的?
用一个字符串来告诉你答案:09151987,从这个字符串可以比较容易地推断出,1987是年份,15肯定不是月份,而是日期,那么09就是月份了。所以,我们可以推断出华为成立于1987年9月15日。
Google是一家伟大的美国公司,请问,Google是什么时候成立的?
也用一个字符串来告诉你答案:04/09/1998,从这个字符串可以推断出1998是年份,但是我们无法推定月份是4还是9。
通过Python,我们可以用指定的值来创建datetime对象,这通常有两种情况。
第一种情况,是我们明确地知道日期的每个组成部分独立的值,我们用以下方式来指定。
>>> birthday = datetime(year=2013, month=2, day=28) >>> birthday datetime.datetime(2013, 2, 28, 0, 0)
另外一种情况更复杂一点,但是在实际编程中应用更广泛,是根据字符串来生成日期对象。这种情况更复杂是因为人类对日期书写的格式太随意了,书写的顺序可能是年月日,可能是月日年,还可能是日月年,其中的分隔符就更多样了,比如:19990603、06.03.1999、3|6|1999、1999_06_03、99-06-03、1999/06/03、1999 06 03。
这种书写格式的不统一,给程序员带来了额外的工作量。作为程序员,我们没法规定车须同轨、书须同文,能做的是给出自己的要求,例如指定日期字符串的同时必须指定相应的格式:
created_at = datetime.strptime('2019-04-25', '%Y-%m-%d')
%Y-%m-%d表示年月日,中间都用“-”来分隔,第一个部分是年,第二个部分是月,第三个部分是日。有了这样的格式信息,我们就能正确解析字符串中的信息,创建出正确的datetime对象。例子中用到的%Y、%m、%d被称为标识符,更多的标识符如表2-9所示。
表2-9 日期时间信息的标识符
来看以下两段代码实例,它们指定了不同风格的日期字符串,同时也指定了相应的格式,从而保证了日期字符串能够被正确地解析。
>>> date1 = datetime.strptime('06_25_2019', '%m_%d_%Y') >>> date1 datetime.datetime(2019, 6, 25, 0, 0) >>> date2 = datetime.strptime('1949/10/01', '%Y/%m/%d') >>> date2 datetime.datetime(1949, 10, 1, 0, 0)