笔记-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. asp.net5中程序根目录的获取

    最近在写一个asp.net5的应用,其中要实现的一个功能是生成一个文件,并且存储到应用程序根目录(这里指project.json所在的文件夹)下的export文件夹下.生成文件内容什么的都做好了,忽然 ...

  2. IO模型与soketserver实现并发

    一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非 ...

  3. Servlet高级部分Listener

    监听器的使用场景: ①:统计在线人数   ②:实现单一登录[一个账号只能在一台机器上登录] Servlet中的8大监听器: 1.         ServletContextListener [接口方 ...

  4. vue实现选中列表功能

    <template> <div> <ul v-for="prop in items"> <dt>{{prop.name}}</ ...

  5. python logging 模块记录日志

    #日志记录到多文件示例 import logging def error_log(message): file_1_1 = logging.FileHandler('error.log', 'a+', ...

  6. CentOs7 修复 引导启动

    一.修复MBR: MBR(Master Boot Record主引导记录): 硬盘的0柱面.0磁头.1扇区称为主引导扇区.其中446Byte是bootloader,64Byte为Partition t ...

  7. pta 编程题21 公路村村通

    其它pta数据结构编程题请参见:pta 题目 这道题考察最小生成树问题,用的是Prim算法. 和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录. #i ...

  8. [转载]正则表达式参考文档 - Regular Expression Syntax Reference.

    正则表达式参考文档 - Regular Expression Syntax Reference. [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/regref. ...

  9. IOS autosizing(设置控件的固定位置大小)

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  10. UVA 10564 Paths through the Hourglass(背包)

    为了方便打印路径,考虑从下往上转移.dp[i][j][S]表示在i行j列总和为S的方案, dp[i][j][S] = dp[i+1][left][S-x]+dp[i+1][right][S-x] 方案 ...