笔记-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. windows 2012 r2 x64 安装IIS注意事项

    详细安装可以参考下面; https://jingyan.baidu.com/article/93f9803f234eade0e46f559f.html 下面只说一些注意事项,如果项目要用到wcf 的话 ...

  2. MVVM技术 - 的实现 @{}来进行 调用那个 DataBinding方法

    new Material Design 支持哭 还有 Data Binding 结束   使用DataBindign 结束 我们很方面的实现 MVVM设计模式   什么是MVVM model 呢.   ...

  3. HTTP原理及状态码汇总

    什么是HTTP: HTTP(HyperText Transfer Protocol超文本传输协议)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准,为了提供一种发布和接收HTM ...

  4. Vue-watch选项

    Vue ----watch 选项 用于 监听数据变化: <!DOCTYPE html> <html lang="en"> <head> < ...

  5. sonarque下载和安装使用

    参考地址: https://www.cnblogs.com/qiumingcheng/p/7253917.html https://www.cnblogs.com/cjsblog/p/10735800 ...

  6. .NET 前台调用后台事件和方法实现小结

    转自:https://www.cnblogs.com/kinger906/p/3431842.html 除了下文讲的方式外,还有一种方式:html里面使用ajax写好提交方式和提交参数,然后以写一行带 ...

  7. 推荐一个VS2015 插件 Favorite Documents

    随着解决方案越来越庞大,查找某个文件变的非常费神,考眼力 有了这个工具我们可以将常用的几个文件或文件夹添加到收藏夹中,随时展开双击即可到达收藏位置 从 视图>其他窗口中打开     安装 在Vi ...

  8. HDU5124 lines

    离散化 + 树状数组. 这些东西自己都是刚接触不久的,所以需要多写点题练练手. 题目描述: 一维坐标中有N条线段,其中有一个点上面覆盖的线段数是最多的,求该点上面的线段数目. 这道题和HDU1556特 ...

  9. Linux进程的虚拟存储器知识点

    http://blog.csdn.net/yxccc_914/article/details/52665713 用libreoffice画表真时有点蛋疼,效率很低.. 深入理解计算机系统->虚拟 ...

  10. 五、react中父子组件间如何传值

    1.父组件向子组件传递数据:父组件绑定属性值传给子组件,子组件通过this.props()接受. 2.子组件向父组件传递数据:子组件绑定一个方法,方法中通过this.props.父组件方法名(参数)传 ...