笔记-python-standard library-8.1 data types-datetime

1.      Datatimes

本章节内容为日期和时间处理类和方法。

1.1.    datetime-basic date and time types

source code: Lib/datetime.py

datetime模块提供了日期和时间处理类,重点是各种格式化的输出。

时间包括两种,世界时和当地时间。

datetime和time对象可以选定时区。

datetime模块提供了下列常量:

datetime.MINYEAR,datetime.MAXYEAR分别是1和9999。

相关模块calendar日历功能,time时间访问和转换

1.1.1.   可用的类型

datetime.date:表示日期

datetime.time:表示时间

datetime.datetime:表示日期+时间

datetime.timedelta:表示两个日期,时间或日期+时间之间的差值

datetime.tzinfo:时区相关信息

datetime.timezone

类继承关系图:

object

timedelta

tzinfo

timezone

time

date

datetime

1.1.2.   timedelta objects

timedelta:两个时间之差。

class datetime.timedelta(days=0, seconds=0,microseconds=0,milliseconds=0,minutes=0, hours=0,weeks=0)

实例属性(只读):

Attribute

Value

days

Between -999999999 and 999999999 inclusive

seconds

Between 0 and 86399 inclusive

microseconds

Between 0 and 999999 inclusive

支持的操作

t1 = t2+t3 or t1= t2-t3

t1= t2*I

f = t2/t3

return a float object

t1 = t2//i

t1 = t2%t3

q,r = divmod(t1,t2)

实例方法:

timedelta.total_seconds() 返回时间差,以秒为单位。

1.1.3.   date objects

class datetime.date(year,month,day)

class methods:

date.today() 返回当日日期

date.fromtimestamp(timestamp) 根据时间戳返回日期

date.fromordinal(ordinal)              将Gregorian日历时间转换为date对象

class attributes:

date.year, date.month, date.day

supported operations:

Operation

Result

date2 = date1 + timedelta

date2 is timedelta.days days removed from date1. (1)

date2 = date1 - timedelta

Computes date2 such that date2 + timedelta == date1. (2)

timedelta = date1 - date2

(3)

date1 < date2

date1 is considered less than date2 when date1 precedes date2 in time. (4)

instance methods:

date.replace(year=self.year, month=self.month, day=self.day)

根据参数返回一个替代后的日期。

date.timetuple()

Return a time.struct_time such as returned by time.localtime(). The hours, minutes and seconds are 0, and the DST flag is -1. d.timetuple()is equivalent to time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1)), where yday = d.toordinal() - date(d.year, 1,1).toordinal() + 1 is the day number within the current year starting with 1 for January 1st.

示例:

>>> a = datetime.date(2017,3,22)

>>> a.timetuple() time.struct_time(tm_year=2017, tm_mon=3, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=81, tm_isdst=-1)

>>> a.timetuple().tm_year

2017

>>> a.timetuple().tm_mon

3

>>> a.timetuple().tm_mday

22

date.weekday()

以数值形式返回星期,注意星期一是0,星期天是6。

date.isoweekday()

与上一函数相同,但星期数值是1-7

date.isocalendar()

Return a 3-tuple, (ISO year, ISO week number, ISO weekday).

date.isoformat()

Return a string representing the date in ISO 8601 format, ‘YYYY-MM-DD’. For example, date(2002, 12, 4).isoformat() == '2002-12-04'.

date.__str__()

等效于date.isoformat()

date.ctime()

返回特定格式的日期 date(2002, 12, 4).ctime() == 'Wed Dec 4 00:00:00 2002'.

date.strftime(format)

date.__format__(format)

都是返回特定格式的日期字符串。

下面是一些日期格式转换的示例:

>>> from datetime import date

>>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001

>>> d

datetime.date(2002, 3, 11)

>>> t = d.timetuple()

>>> for i in t:

...     print(i)

2002                # year

3                   # month

11                  # day

0

0

0

0                   # weekday (0 = Monday)

70                  # 70th day in the year

-1

>>> ic = d.isocalendar()

>>> for i in ic:

...     print(i)

2002                # ISO year

11                  # ISO week number

1                   # ISO day number ( 1 = Monday )

>>> d.isoformat()

'2002-03-11'

>>> d.strftime("%d/%m/%y")

'11/03/02'

>>> d.strftime("%A %d. %B %Y")

'Monday 11. March 2002'

>>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")

'The day is 11, the month is March.'

1.1.4.   datetime objects

class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

class methods:

datetime.today()

返回日期时间,结果如下:datetime.datetime(2018, 9, 29, 21, 16, 9, 954626)

datetime.now(tz=None)

返回日期时间,如果tz非空,返回一个tzinfo子类,时间进行转换。

datetime.utcnow() 返回utc时间。

datetime.fromtimestamp(timestamp, ta=None) 根据给出的时间戳返回时日期时间。

datetime.utcfromtimestamp(timestamp) 返回utc日期时间

datetime.fromordinal(ordinal)       返回Gregorian日期时间

datetime.combine(date,time.tzinfo=self.tzinfo) 将date和time对象合并成datetime对象

datetime.strptime(date_string, format)      根据参数,返回datetime对象

class attributes:

datetime.year

datetime.month

datetime.day

datetime.hour

datetime.minute

datetime.second

datetime.microsecond

datetime.tzinfo

datetime.fold

support operations:

Operation

Result

datetime2 = datetime1 + timedelta

(1)

datetime2 = datetime1 - timedelta

(2)

timedelta = datetime1 - datetime2

(3)

datetime1 < datetime2

Compares datetime to datetime. (4)

instance methods:

date(),time(),timetz(),

replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)

astimezone(tz=None)

utcoffset(), dst(),tzname(), timetuple(),utctimetuple()

timestamp()

weekday()

isoweekday()

isocalendar()

isoformat(sep=’T’, timespec=’auto’)

__str__()

ctime()

strftime(format)

__format__(format)

Examples of working with datetime objects:

>>>

>>> from datetime import datetime, date, time

>>> # Using datetime.combine()

>>> d = date(2005, 7, 14)

>>> t = time(12, 30)

>>> datetime.combine(d, t)

datetime.datetime(2005, 7, 14, 12, 30)

>>> # Using datetime.now() or datetime.utcnow()

>>> datetime.now()

datetime.datetime(2007, 12, 6, 16, 29, 43, 79043)   # GMT +1

>>> datetime.utcnow()

datetime.datetime(2007, 12, 6, 15, 29, 43, 79060)

>>> # Using datetime.strptime()

>>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")

>>> dt

datetime.datetime(2006, 11, 21, 16, 30)

>>> # Using datetime.timetuple() to get tuple of all attributes

>>> tt = dt.timetuple()

>>> for it in tt:

...     print(it)

...

2006    # year

11      # month

21      # day

16      # hour

30      # minute

0       # second

1       # weekday (0 = Monday)

325     # number of days since 1st January

-1      # dst - method tzinfo.dst() returned None

>>> # Date in ISO format

>>> ic = dt.isocalendar()

>>> for it in ic:

...     print(it)

...

2006    # ISO year

47      # ISO week

2       # ISO weekday

>>> # Formatting datetime

>>> dt.strftime("%A, %d. %B %Y %I:%M%p")

'Tuesday, 21. November 2006 04:30PM'

>>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")

'The day is 21, the month is November, the time is 04:30PM.'

Using datetime with tzinfo:

>>>

>>> from datetime import timedelta, datetime, tzinfo

>>> class GMT1(tzinfo):

...     def utcoffset(self, dt):

...         return timedelta(hours=1) + self.dst(dt)

...     def dst(self, dt):

...         # DST starts last Sunday in March

...         d = datetime(dt.year, 4, 1)   # ends last Sunday in October

...         self.dston = d - timedelta(days=d.weekday() + 1)

...         d = datetime(dt.year, 11, 1)

...         self.dstoff = d - timedelta(days=d.weekday() + 1)

...         if self.dston <=  dt.replace(tzinfo=None) < self.dstoff:

...             return timedelta(hours=1)

...         else:

...             return timedelta(0)

...     def tzname(self,dt):

...          return "GMT +1"

...

>>> class GMT2(tzinfo):

...     def utcoffset(self, dt):

...         return timedelta(hours=2) + self.dst(dt)

...     def dst(self, dt):

...         d = datetime(dt.year, 4, 1)

...         self.dston = d - timedelta(days=d.weekday() + 1)

...         d = datetime(dt.year, 11, 1)

...         self.dstoff = d - timedelta(days=d.weekday() + 1)

...         if self.dston <=  dt.replace(tzinfo=None) < self.dstoff:

...             return timedelta(hours=1)

...         else:

...             return timedelta(0)

...     def tzname(self,dt):

...         return "GMT +2"

...

>>> gmt1 = GMT1()

>>> # Daylight Saving Time

>>> dt1 = datetime(2006, 11, 21, 16, 30, tzinfo=gmt1)

>>> dt1.dst()

datetime.timedelta(0)

>>> dt1.utcoffset()

datetime.timedelta(0, 3600)

>>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=gmt1)

>>> dt2.dst()

datetime.timedelta(0, 3600)

>>> dt2.utcoffset()

datetime.timedelta(0, 7200)

>>> # Convert datetime to another time zone

>>> dt3 = dt2.astimezone(GMT2())

>>> dt3

datetime.datetime(2006, 6, 14, 14, 0, tzinfo=<GMT2 object at 0x...>)

>>> dt2

datetime.datetime(2006, 6, 14, 13, 0, tzinfo=<GMT1 object at 0x...>)

>>> dt2.utctimetuple() == dt3.utctimetuple()

True

1.1.5.   time objects

class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

instance attributes(read-only):

hour,minute,second,microsecond,tzinfo,fold

supported operations:

  1. comparison of time to time.
  2. hash, use as dict key
  3. efficent pickling

instance methods:与date,datetime没什么太大不同,不重复了。

1.1.6.   strftime() and strptime() behavior

Directive

Meaning

Example

%a

Weekday as locale’s abbreviated name.

Sun, Mon, …, Sat (en_US);

So, Mo, …, Sa (de_DE)

%A

Weekday as locale’s full name.

Sunday, Monday, …, Saturday (en_US);

Sonntag, Montag, …, Samstag (de_DE)

%w

Weekday as a decimal number, where 0 is Sunday and 6 is Saturday.

0, 1, …, 6

%d

Day of the month as a zero-padded decimal number.

01, 02, …, 31

%b

Month as locale’s abbreviated name.

Jan, Feb, …, Dec (en_US);

Jan, Feb, …, Dez (de_DE)

%B

Month as locale’s full name.

January, February, …, December (en_US);

Januar, Februar, …, Dezember (de_DE)

%m

Month as a zero-padded decimal number.

01, 02, …, 12

%y

Year without century as a zero-padded decimal number.

00, 01, …, 99

%Y

Year with century as a decimal number.

0001, 0002, …, 2013, 2014, …, 9998, 9999

%H

Hour (24-hour clock) as a zero-padded decimal number.

00, 01, …, 23

%I

Hour (12-hour clock) as a zero-padded decimal number.

01, 02, …, 12

%p

Locale’s equivalent of either AM or PM.

AM, PM (en_US);

am, pm (de_DE)

%M

Minute as a zero-padded decimal number.

00, 01, …, 59

%S

Second as a zero-padded decimal number.

00, 01, …, 59

%f

Microsecond as a decimal number, zero-padded on the left.

000000, 000001, …, 999999

%z

UTC offset in the form +HHMM or -HHMM (empty string if the object is naive).

(empty), +0000, -0400, +1030

%Z

Time zone name (empty string if the object is naive).

(empty), UTC, EST, CST

%j

Day of the year as a zero-padded decimal number.

001, 002, …, 366

%U

Week number of the year (Sunday as the first day of the week) as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0.

00, 01, …, 53

%W

Week number of the year (Monday as the first day of the week) as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0.

00, 01, …, 53

%c

Locale’s appropriate date and time representation.

Tue Aug 16 21:30:00 1988 (en_US);

Di 16 Aug 21:30:00 1988 (de_DE)

%x

Locale’s appropriate date representation.

08/16/88 (None);

08/16/1988 (en_US);

16.08.1988 (de_DE)

%X

Locale’s appropriate time representation.

21:30:00 (en_US);

21:30:00 (de_DE)

%%

A literal '%' character.

%

笔记-python-standard library-8.1 data types-datetime的更多相关文章

  1. Python Standard Library

    Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...

  2. The Python Standard Library

    The Python Standard Library¶ While The Python Language Reference describes the exact syntax and sema ...

  3. Python语言中对于json数据的编解码——Usage of json a Python standard library

    一.概述 1.1 关于JSON数据格式 JSON (JavaScript Object Notation), specified by RFC 7159 (which obsoletes RFC 46 ...

  4. 《The Python Standard Library》——http模块阅读笔记1

    官方文档:https://docs.python.org/3.5/library/http.html 偷个懒,截图如下: 即,http客户端编程一般用urllib.request库(主要用于“在这复杂 ...

  5. 《The Python Standard Library》——http模块阅读笔记2

    http.server是用来构建HTTP服务器(web服务器)的模块,定义了许多相关的类. 创建及运行服务器的代码一般为: def run(server_class=HTTPServer, handl ...

  6. 《The Python Standard Library》——http模块阅读笔记3

    http.cookies — HTTP state management http.cookies模块定义了一系列类来抽象cookies这个概念,一个HTTP状态管理机制.该模块支持string-on ...

  7. Python Standard Library 学习(一) -- Built-in Functions 内建函数

    内建函数列表 Built-in Functions abs() divmod() input() open() staticmethod() all() enumerate() int() ord() ...

  8. 【12c】扩展数据类型(Extended Data Types)-- MAX_STRING_SIZE

    [12c]扩展数据类型(Extended Data Types)-- MAX_STRING_SIZE 在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的 ...

  9. Data Types in the Kernel &lt;LDD3 学习笔记&gt;

    Data Types in the Kernel Use of Standard C Types /* * datasize.c -- print the size of common data it ...

  10. C++11新特性——The C++ standard library, 2nd Edition 笔记(一)

    前言 这是我阅读<The C++ standard library, 2nd Edition>所做读书笔记的第一篇.这个系列基本上会以一章一篇的节奏来写,少数以C++03为主的章节会和其它 ...

随机推荐

  1. 图片单独上传 (word)

    Word.ApplicationClass wordApp=new ApplicationClass(); object file=path; object nullobj=System.Reflec ...

  2. Js/Jquery获取input file的文件名

    html代码:     <input type="file" name="file" id="file" class="in ...

  3. Struts2笔记3--OGNL

    一.OGNL入门 1.简介     OGNL的全称是对象图导航语言(Object-Graph Navigation Language),它是一种功能强大的开源表达式语言,使用这种表达式语言,可以通过某 ...

  4. javascript数组属性及方法

    数组元素的添加 1. arrayt.splice(index,howmany,item1,.....,itemX) 向/从数组中添加/删除项目,然后返回被删除的项目 2. array.unshift( ...

  5. 【extjs6学习笔记】0.3 准备: 类库结构2

  6. lintcode中等难度5道题

    1.整数转罗马数字 对任一个罗马数字可以 由12个罗马字符进行加法操作完成,且大数在左,小数在右,可以将一个数字进行拆分来求解 2.买卖股票的最佳时机 II 可将问题转换为只要相连的两天prices[ ...

  7. 再次尝试windows下msys+MinGW编译ffmpeg

    电脑上安装太多的开源库,环境变量里面一些常用的头文件都有几种,以前使用的编译ffmpeg的方法现在常常提示错误.从config.log中看,这些错误往往都是一些头文件引用错误导致.由于项目中继续编译自 ...

  8. java Vamei快速教程03 构造器和方法重载

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在方法与数据成员中,我们提到,Java中的对象在创建的时候会初始化(initial ...

  9. linux 命令——43 killall(转)

    Linux 系统中的killall命令用于杀死指定名字的进程(kill processes by name).我们可以使用kill命令杀死指定进程PID的进 程,如果要找到我们需要杀死的进程,我们还需 ...

  10. linux 命令——27 chmod

    chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法. 一种是包含字母和操作符表达式的文字设定法: 另一种是包含数字的数字设定法. Linux系统中 ...