转自:https://www.cnblogs.com/fclbky/articles/4098204.html

datetime 模块提供了各种类用于操作日期和时间,该模块侧重于高效率的格式化输出

在 Python 中,与时间处理有关的模块包括:time,datetime 以及 calendar

datetime 模块定义了两个常量:

  • datetime.MINYEAR - date 和 datetime 对象所能支持的最小年份,object.MINYEAR 的值为 1
  • datetime.MAXYEAR - date 和 datetime 对象所能支持的最大年份,object.MAXYEAR 的值为 9999

datetime 模块中定义的类(前四个下方有详解):

  • datetime.date - 表示日期的类,常用属性:year, month, day
  • datetime.time - 表示时间的类,常用属性:hour, minute, second, microsecond, tzinfo
  • datetime.datetime - 表示日期和时间的类,常用属性: year, month, day, hour, minute, second, microsecond, tzinfo
  • datetime.timedelta - 表示时间间隔,即两个时间点(date,time,datetime)之间的长度
  • datetime.tzinfo - 表示时区的基类,为上方的 time 和 datetime 类提供调整的基准
  • datetime.timezone - 表示 UTC 时区的固定偏移,是 tzinfo 基类的实现

注:上边这些类的对象是不可变的

上边这些类的从属关系:

  1. object
  2. timedelta
  3. tzinfo
  4. timezone
  5. time
  6. date
  7. datetime

复制代码

timedelta 对象

timedelta 对象表示两个日期或时间之间的间隔

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

复制代码

以上所有的参数都是可选的(默认为 0),参数的可以是整数或浮点数,正数或负数。

内部的存储单位只有 days(天)、seconds(秒)、microseconds(毫秒),其他单位均先转换后再存储:

  • 1 millisecond -> 1000 microseconds
  • 1 minutes -> 60 seconds
  • 1 hours -> 3600 seconds
  • 1 weeks -> 7 days

而 days、seconds 和 microseconds 为了不产生时间表示上的歧义,将根据以下范围自动“进位”:

  • 0 <= microseconds < 1000000
  • 0 <= seconds < 3600 * 24(1小时的秒数 * 24小时)
  • -999999999 <= days <= 999999999

timedelta 类属性:

  • timedelta.min - timedelta 对象负值的极限,timedelta(-999999999)
  • timedelta.max - timedelta 对象正值的极限,timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
  • timedelta.resolution - 两个 timedelta 不相等的对象之间最小的差值,timedelta(microseconds=1)

请注意,在正常情况下,timedelta.max > -timedelta.min,-timedelta.max 无意义。

timedelta 实例属性(只读):

属性 取值范围
timedelta.days -999999999 ~ 999999999
timedelta.seconds 0 ~ 86399
timedelta.microseconds 0 ~ 999999

timedelta 对象支持的操作:

操作 结果
t1 = t2 + t3 t2 和 t3 的和,随后:t1 - t2 == t3 and t1 - t3 == t2 为 True(注1)
t1 = t2 - t3 t2 和 t3 的差,随后:t1 == t2 - t3 and t2 == t1 + t3 为 True(注1)
t1 = t2 * i 或 t1 = i * t2 对象乘以一个整数,随后:t1 // i == t2 为 true;且 i != 0
t1 = t2 * f 或 t1 = f * t2 对象乘以一个浮点数,结果四舍五入到精度 timedelta.resolution(注1)
f = t2 / t3 t2 和 t3 的商(注3),返回一个 float 对象
t1 = t2 / f 或 t1 = t2 / i 对象除以一个整数或浮点数,结果四舍五入到精度 timedelta.resolution
t1 = t2 // i 或 t1 = t2 // t3 对象地板除一个整数或浮点数,结果舍去小数,返回一个整数(注3)
t1 = t2 % t3 t2 和 t3 的余数,返回一个 timedelta 对象(注3)
q, r = divmod(t1, t2) 计算 t1 和 t2 的商和余数,q = t1 // t2(注3),r = t1 % t2,q 是一个整数,r 是一个 timedelta 对象
+t1 返回一个 timedelta 对象,且值相同(注2)
-t1 等同于 timedelta(-t1.days, -t1.seconds, -t1.microseconds),并且相当于 t1 * -1(注1、4)
abs(t) 当 t.days >= 0 时,等同于 +t;当 t.days < = 时,等同于 -t(注2)
str(t) 返回一个字符串,按照此格式:[D day[ s ], ][H]H:MM:SS[.UUUUUU]
repr(t) 返回一个字符串,按照此格式:datetime.timedelta(D[, S[, U]])

注1:这是准确的,但可能会溢出
注2:这是准确的,并且不会溢出
注3:除数为 0 会引发 ZeroDivisionError 异常
注4:-timedelta.max 是无意义的

timedelta 实例方法:

timedelta.total_seconds()
- 返回 timedelta 对象所包含的总秒数,相当于 td / timedelta(seconds=1)

请注意,对于非常大的时间间隔(在大多数平台上是大于270年),这种方法将失去微秒(microsecond)精度

timedelta 用法示例:

  1. # 爱学习,爱鱼C工作室
  2. >>> from datetime import timedelta
  3. >>> year = timedelta(days=365)
  4. >>> another_year = timedelta(weeks=40, days=84, hours=23,
  5. ...                          minutes=50, seconds=600)  # adds up to 365 days
  6. >>> year.total_seconds()
  7. 31536000.0
  8. >>> year == another_year
  9. True
  10. >>> ten_years = 10 * year
  11. >>> ten_years, ten_years.days // 365
  12. (datetime.timedelta(3650), 10)
  13. >>> nine_years = ten_years - year
  14. >>> nine_years, nine_years.days // 365
  15. (datetime.timedelta(3285), 9)
  16. >>> three_years = nine_years // 3;
  17. >>> three_years, three_years.days // 365
  18. (datetime.timedelta(1095), 3)
  19. >>> abs(three_years - ten_years) == 2 * three_years + year
  20. True

复制代码

date 对象

date 对象表示一个日期,在一个理想化的日历里,日期由 year(年)、month(月)、day(日)组成

  1. datetime.date(year, month, day)

复制代码

所有的参数都是必需的,参数可以是整数,并且在以下范围内:

  • MINYEAR <= year <= MAXYEAR(也就是 1 ~ 9999)
  • 1 <= month <= 12
  • 1 <= day <= 根据 year 和 month 来决定(例如 2015年2月 只有 28 天)

date 类方法(classmethod):

  • date.today() - 返回一个表示当前本地日期的 date 对象
  • date.fromtimestamp(timestamp) - 根据给定的时间戮,返回一个 date 对象
  • date.fromordinal(ordinal) - 将 Gregorian 日历时间转换为 date 对象(Gregorian Calendar:一种日历表示方法,类似于我国的农历,西方国家使用比较多)

date 类属性:

  • date.min - date 对象所能表示的最早日期,date(MINYEAR, 1, 1)
  • date.max - date 对象所能表示的最晚日期,date(MAXYEAR, 12, 31)
  • date.resolution - date 对象表示日期的最小单位,在这里是 1 天,timedelta(days=1)

date 实例属性(只读):

属性 取值范围
date.year MINYEAR ~ MAXYEAR(1 ~ 9999)
date.month 1 ~ 12
date.day 1 ~ 根据 year 和 month 来决定(例如 2015年2月 只有 28 天)

date 对象支持的操作:

操作 结果
date2 = date1 + timedelta 日期加上一个时间间隔,返回一个新的日期对象(注1)
date2 = date1 - timedelta 日期减去一个时间间隔,相当于 date2 + timedelta == date1(注2)
timedelta = date1 - date2 (注3)
date1 < date2 当 date1 的日期在 date2 之前时,我们认为 date1 < date2(注4)

注1:timedelta.day > 0 或 timedelta.day < 0 决定 date2
日期增长的方向;随后,date2 - date1 == timedelta.days;timedelta.seconds 和
timedelta.microseconds 被忽略;如果 date2.year < MINYEAR 或 date2.year >
MAXYEAR,引发 OverflowError 异常

注2:这并不等同于 date1 + (-timedelta),因为单独的 -timedelta 可能会溢出,而 date1 - timedelta 则不会溢出;timedelta.seconds 和 timedelta.microseconds 被忽略

注3:这是准确的,并且不会溢出;timedelta.seconds 和 timedelta.microseconds 都为 0,然后 date2 + timedelta == date1

注4:换句话说,当且仅当 date1.toordinal() < date2.toordinal(),才有 date1 < date2

date 实例方法:

date.replace(year, month, day)
- 生成一个新的日期对象,用参数指定的年、月、日代替原有对象中的属性

date.timetuple()
- 返回日期对应的 time.struct_time 对象(类似于 time 模块的 time.localtime())

date.toordinal()
- 返回日期对应的 Gregorian Calendar 日期

date.weekday()
- 返回 0 ~ 6 表示星期几(星期一是 0,依此类推)

date.isoweekday()
- 返回 1 ~ 7 表示星期几(星期一是1, 依此类推)

date.isocalendar()
- 返回一个三元组格式 (year, month, day)

date.isoformat()
- 返回一个 ISO 8601 格式的日期字符串,如 "YYYY-MM-DD" 的字符串

date.__str__()
- 对于 date 对象 d 来说,str(d) 相当于 d.isoformat()

date.ctime()
- 返回一个表示日期的字符串,相当于 time 模块的 time.ctime(time.mktime(d.timetuple()))

date.strftime(format)
- 返回自定义格式化字符串表示日期,下面有详解

date.__format__(format)
- 跟 date.strftime(format) 一样,这使得调用 str.format() 时可以指定 data 对象的字符串

以下是计算天数的例子:

  1. # You may say I'm the dreamer. But I'm not the only one!
  2. >>> import time
  3. >>> from datetime import date
  4. >>> today = date.today()
  5. >>> today
  6. datetime.date(2014, 8, 31)
  7. >>> today == date.fromtimestamp(time.time())
  8. True
  9. >>> my_birthday = date(today.year, 6, 24)
  10. >>> if my_birthday < today:
  11. my_birthday = my_birthday.replace(year = today.year + 1)
  12. >>> my_birthday
  13. datetime.date(2015, 6, 24)
  14. >>> time_to_birthday = abs(my_birthday - today)
  15. >>> time_to_birthday.days
  16. 297

复制代码

关于 date 的综合应用:

  1. # Follow FishC. Follow your dream!
  2. >>> from datetime import date
  3. >>> d = date.fromordinal(735678)  # 自日期 1.1.0001 之后的第 735678 天
  4. >>> d
  5. datetime.date(2015, 3, 21)
  6. >>> t = d.timetuple()
  7. >>> for i in t:
  8. print(i)
  9. 2015
  10. 3
  11. 21
  12. 0
  13. 0
  14. 0
  15. 5
  16. 80
  17. -1
  18. >>> ic = d.isocalendar()
  19. >>> for i in ic:
  20. print(i)
  21. 2015
  22. 12
  23. 6
  24. >>> d.isoformat()
  25. '2015-03-21'
  26. >>> d.strftime("%d/%m/%y")
  27. '21/03/15'
  28. >>> d.strftime("%A %d. %B %Y")
  29. 'Saturday 21. March 2015'
  30. >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
  31. 'The day is 21, the month is March.'

复制代码

time 对象

time 对象表示一天中的一个时间,并且可以通过 tzinfo 对象进行调整

  1. datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

复制代码

所有的参数都是可选的;tzinfo 可以是 None 或者 tzinfo 子类的实例对象;其余的参数可以是整数,并且在以下范围内:

  • 0 <= hour < 24
  • 0 <= minute < 60
  • 0 <= second < 60
  • 0 <= microsecond < 1000000

注:如果参数超出范围,将引发 ValueError 异常

time 类属性

  • time.min - time 对象所能表示的最早时间,time(0, 0, 0, 0)
  • time.max - time 对象所能表示的最晚时间,time(23, 59, 59, 999999)
  • time.resolution - time 对象表示时间的最小单位,在这里是 1 毫秒,timedelta(microseconds=1)

time 实例属性(只读):

属性 取值范围
time.hour 0 ~ 23
time.minute 0 ~ 59
time.second 0 ~ 59
time.microsecond 0 ~ 999999
time.tzinfo 通过构造函数的 tzinfo 参数赋值

time 实例方法:

time.replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]) 
- 生成一个新的时间对象,用参数指定时间代替原有对象中的属性

time.isoformat()
- 返回一个 ISO 8601 格式的日期字符串,如 "HH:MM:SS.mmmmmm" 的字符串

time.__str__()
- 对于 time 对象 t 来说,str(t) 相当于 t.isoformat()

time.strftime(format)
- 返回自定义格式化字符串表示时间,下面有详解

time.__format__(format)
- 跟 time.strftime(format) 一样,这使得调用 str.format() 时可以指定 time 对象的字符串

time.utcoffset()
- 如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.utcoffset(self)

time.dst()
- 如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.dst(self)

time.tzname()
- 如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.tzname(self)

关于 time 的综合应用:

  1. # 学编程,到鱼C
  2. >>> from datetime import time, timedelta, tzinfo
  3. >>> class GMT1(tzinfo):
  4. def utcoffset(self, dt):
  5. return timedelta(hours=1)
  6. def dst(self, dt):
  7. return timedelta(0)
  8. def tzname(self, dt):
  9. return "欧洲/布拉格"
  10. >>> t = time(14, 10, 30, tzinfo=GMT1())
  11. >>> t
  12. datetime.time(14, 10, 30, tzinfo=<__main__.GMT1 object at 0x02D7FE90>)
  13. >>> gmt = GMT1()
  14. >>> t.isoformat()
  15. '14:10:30+01:00'
  16. >>> t.dst()
  17. datetime.timedelta(0)
  18. >>> t.tzname()
  19. '欧洲/布拉格'
  20. >>> t.strftime("%H:%M:%S %Z")
  21. '14:10:30 欧洲/布拉格'
  22. >>> 'The {} is {:%H:%M}.'.format("time", t)
  23. 'The time is 14:10.'

复制代码

datetime 对象

datetime 对象是 date 对象和 time 对象的结合体,并且包含他们的所有信息

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

复制代码

必须的参数是 year(年)、month(月)、day(日);tzinfo 可以是 None 或者 tzinfo 子类的实例对象;其余的参数可以是整数,并且在以下范围内:

  • MINYEAR <= year <= MAXYEAR(也就是 1 ~ 9999)
  • 1 <= month <= 12
  • 1 <= day <= 根据 year 和 month 来决定(例如 2015年2月 只有 28 天)
  • 0 <= hour < 24
  • 0 <= minute < 60
  • 0 <= second < 60
  • 0 <= microsecond < 1000000

注:如果参数超出范围,将引发 ValueError 异常

datetime 类方法(classmethod):

datetime.today()
- 返回一个表示当前本地时间的 datetime 对象,等同于 datetime.fromtimestamp(time.time())

datetime.now(tz=None)
- 返回一个表示当前本地时间的 datetime 对象;如果提供了参数 tz,则获取 tz 参数所指时区的本地时间

datetime.utcnow()
- 返回一个当前 UTC 时间的 datetime 对象

datetime.fromtimestamp(timestamp, tz=None)
- 根据时间戮创建一个 datetime 对象,参数 tz 指定时区信息

datetime.utcfromtimestamp(timestamp)
- 根据时间戮创建一个 UTC 时间的 datetime 对象

datetime.fromordinal(ordinal)
- 返回对应 Gregorian 日历时间对应的 datetime 对象

datetime.combine(date, time)
- 根据参数 date 和 time,创建一个 datetime 对象

datetime.strptime(date_string, format)
- 将格式化字符串转换为 datetime 对象

datetime 类属性:

  • datetime.min - datetime 对象所能表示的最早日期,datetime(MINYEAR, 1, 1, tzinfo=None)
  • datetime.max - datetime 对象所能表示的最晚日期,datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)
  • datetime.resolution - datetime 对象表示日期的最小单位,在这里是 1 毫秒,timedelta(microseconds=1)

datetime 实例属性(只读):

属性 取值范围
datetime.year MINYEAR ~ MAXYEAR(1 ~ 9999)
datetime.month 1 ~ 12
datetime.day 1 ~ 根据 year 和 month 来决定(例如 2015年2月 只有 28 天)
datetime.hour 0 ~ 23
datetime.minute 0 ~ 59
datetime.second 0 ~ 59
datetime.microsecond 0 ~ 999999
datetime.tzinfo 通过构造函数的 tzinfo 参数赋值

datetime 对象支持的操作:

操作 结果
datetime2 = datetime1 + timedelta 日期加上一个时间间隔,返回一个新的日期对象(注1)
datetime2 = datetime1 - timedelta 日期减去一个时间间隔,相当于 datetime2 + timedelta == datetime1(注2)
timedelta = datetime1 - datetime2 两个日期相减得到一个时间间隔(注3)
datetime1 < datetime2 当 datetime1 的日期在 datetime2 之前时,我们认为 datetime1 < datetime2

注1:timedelta.day > 0 或 timedelta.day < 0 决定 datetime2
日期增长的方向;计算结果 datetime2 的 tzinfo 属性和 datetime1 相同;如果 date2.year <
MINYEAR 或 date2.year > MAXYEAR,引发 OverflowError 异常

注2:计算结果 datetime2 的 tzinfo 属性和 datetime1 相同;这并不等同于 date1 + (-timedelta),因为单独的 -timedelta 可能会溢出,而 date1 - timedelta 则不会溢出

注3:如果
datetime1 和 datetime2 的 tzinfo 属性一样(指向同一个时区),则 tzinfo 属性被忽略,计算结果为一个
timedelta 对象 t,则 datetime2 + t == datetime1(不用进行时区调整);如果 datetime1 和
datetime2 的 tzinfo 属性不一样(指向不同时区),则 datetime1 和 datetime2 会先被转换为 UTC
时区时间,在进行计算,(datetime1.replace(tzinfo=None) - datetime1.utcoffset()) -
(datetime2.replace(tzinfo=None) - datetime2.utcoffset())

datetime 实例方法:

datetime.date()
- 返回一个 date 对象datetime.time() - 返回一个 time 对象(tzinfo 属性为 None)

datetime.timetz()
- 返回一个 time() 对象(带有 tzinfo 属性)

datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
- 生成一个新的日期对象,用参数指定日期和时间代替原有对象中的属性

datetime.astimezone(tz=None)
- 传入一个新的 tzinfo 属性,返回根据新时区调整好的 datetime 对象

datetime.utcoffset()
- 如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.utcoffset(self)

datetime.dst()
- 如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.dst(self)

datetime.tzname()
- 如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.tzname(self)

datetime.timetuple()
-  返回日期对应的 time.struct_time 对象(类似于 time 模块的 time.localtime())

datetime.utctimetuple()
- 返回 UTC 日期对应的 time.struct_time 对象

datetime.toordinal()
- 返回日期对应的 Gregorian Calendar 日期(类似于 self.date().toordinal())

datetime.timestamp()
- 返回当前时间的时间戳(类似于 time 模块的 time.time())

datetime.weekday()
- 返回 0 ~ 6 表示星期几(星期一是 0,依此类推)

datetime.isoweekday() 
- 返回 1 ~ 7 表示星期几(星期一是1, 依此类推)

datetime.isocalendar() 
- 返回一个三元组格式 (year, month, day)

datetime.isoformat(sep='T')
- 返回一个 ISO 8601 格式的日期字符串,如 "YYYY-MM-DD" 的字符串

datetime.__str__()
- 对于 date 对象 d 来说,str(d) 相当于 d.isoformat()

datetime.ctime()
- 返回一个表示日期的字符串,相当于 time 模块的 time.ctime(time.mktime(d.timetuple()))

datetime.strftime(format)
- 返回自定义格式化字符串表示日期,下面有详解

datetime.__format__(format)
- 跟 datetime.strftime(format) 一样,这使得调用 str.format() 时可以指定 data 对象的字符串

关于 datetime 的综合应用:

  1. # I love FishC.com!
  2. >>> from datetime import datetime, date, time
  3. # 使用 datetime.combine()
  4. >>> d = date(2015, 8, 1)
  5. >>> t = time(12, 30)
  6. >>> datetime.combine(d, t)
  7. datetime.datetime(2015, 8, 1, 12, 30)
  8. # 使用 datetime.now() 或 datetime.utcnow()
  9. >>> datetime.now()
  10. datetime.datetime(2014, 8, 31, 18, 13, 40, 858954)
  11. >>> datetime.utcnow()
  12. datetime.datetime(2014, 8, 31, 10, 13, 49, 347984)
  13. # 使用 datetime.srptime()
  14. >>> dt = datetime.strptime("21/11/14 16:30", "%d/%m/%y %H:%M")
  15. >>> dt
  16. datetime.datetime(2014, 11, 21, 16, 30)
  17. # 使用 datetime.timetuple()
  18. >>> tt = dt.timetuple()
  19. >>> for it in tt:
  20. print(it)
  21. 2014
  22. 11
  23. 21
  24. 16
  25. 30
  26. 0
  27. 4
  28. 325
  29. -1
  30. # ISO 格式的日期
  31. >>> ic = dt.isocalendar()
  32. >>> for it in ic:
  33. print(it)
  34. 2014
  35. 47
  36. 5
  37. # 格式化 datetime 对象
  38. >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
  39. 'Friday, 21. November 2014 04:30PM'
  40. >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
  41. 'The day is 21, the month is November, the time is 04:30PM.'

复制代码

带有 tzinfo 的 datetime 综合演示:

  1. # 嘿,都能看到这里来了,毅力不错哈^_^
  2. >>> from datetime import timedelta, datetime, tzinfo
  3. >>> class GMT1(tzinfo):
  4. def utcoffset(self, dt):
  5. return timedelta(hours=1) + self.dst(dt)
  6. def dst(self, dt):
  7. # DST 开始于三月最后一个星期天
  8. # 结束于十月最后一个星期天
  9. d = datetime(dt.year, 4, 1)
  10. self.dston = d - timedelta(days=d.weekday() + 1)
  11. d = datetime(dt.year, 11, 1)
  12. self.dstoff = d - timedelta(days=d.weekday() + 1)
  13. if self.dston <= dt.replace(tzinfo=None) < self.dstoff:
  14. return timedelta(hours=1)
  15. else:
  16. return timedelta(0)
  17. def tzname(self, dt):
  18. return "GMT +1"
  19. >>> class GMT2(tzinfo):
  20. def utcoffset(self, dt):
  21. return timedelta(hours=2) + self.dst(dt)
  22. def dst(self, dt):
  23. d = datetime(dt.year, 4, 1)
  24. self.dston = d - timedelta(days=d.weekday() + 1)
  25. d = datetime(dt.year, 11, 1)
  26. self.dstoff = d - timedelta(days=d.weekday() + 1)
  27. if self.dston <=  dt.replace(tzinfo=None) < self.dstoff:
  28. return timedelta(hours=1)
  29. else:
  30. return timedelta(0)
  31. def tzname(self, dt):
  32. return "GMT +2"
  33. >>> gmt1 = GMT1()
  34. # 夏令时
  35. >>> dt1 = datetime(2014, 11, 21, 16, 30, tzinfo=gmt1)
  36. >>> dt1.dst()
  37. datetime.timedelta(0)
  38. >>> dt1.utcoffset()
  39. datetime.timedelta(0, 3600)
  40. >>> dt2 = datetime(2014, 6, 14, 13, 0, tzinfo=gmt1)
  41. >>> dt2.dst()
  42. datetime.timedelta(0, 3600)
  43. >>> dt2.utcoffset()
  44. datetime.timedelta(0, 7200)
  45. # 将 datetime 转换到另一个时区
  46. >>> dt3 = dt2.astimezone(GMT2())
  47. >>> dt3
  48. datetime.datetime(2014, 6, 14, 14, 0, tzinfo=<__main__.GMT2 object at 0x036C0F70>)
  49. >>> dt2
  50. datetime.datetime(2014, 6, 14, 13, 0, tzinfo=<__main__.GMT1 object at 0x036C0B10>)
  51. >>> dt2.utctimetuple() == dt3.utctimetuple()
  52. True

复制代码

格式化字符串:strftime() 和 strptime()

date, datetime, 和 time 对象均支持使用 strftime(format) 方法,将指定的日期或时间转换为自定义的格式化字符串

相反的,datetime.strptime() 类方法却是把格式化字符串转换为 datetime 对象

格式化指令 含义
%a 星期的简写(星期一 ~ 天:Mon, Tue, Wed, Thu, Fri, Sat, Sun)
%A 星期的全写(星期一 ~ 天:Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)
%w 在一个星期中的第几天( 0 表示星期天 ... 6 表示星期六)
%d 在一个月中的第几天(01, 02, ..., 31)
%b 月份的简写(一月 ~ 十二月:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
%B 月份的全写(一月 ~ 十二月:January, February, March, April, May, June, July, August, September, October, November, December)
%m 月份(01, 02, ..., 12)
%y 用两个数字表示年份(例如 2014年 == 14)
%Y 用四个数字表示年份
%H 二十四小时制(00, 01, ..., 23)
%I 十二小时制(01, 02, ..., 11)
%p AM 或者 PM
%M 分钟(00, 01, ..., 59)
%S 秒(00, 01, ..., 59)
%f 微秒(000000, 000001, ..., 999999)
%z 与 UTC 时间的间隔 ;如果是本地时间,返回空字符串((empty), +0000, -0400, +1030)
%Z 时区名称;如果是本地时间,返回空字符串((empty), UTC, EST, CST)
%j 在一年中的第几天(001, 002, ..., 366)
%U 在一年中的第几周,星期天作为第一天(00, 01, ..., 53)
%W 在一年中的第几周,星期一作为第一天(00, 01, ..., 53)
%c 用字符串表示日期和时间(Tue Aug 16 21:30:00 2014)
%x 用字符串表示日期(08/16/14)
%X 用字符串表示时间(21:30:00)
%% 表示百分号

格式化字符串综合演示:

  1. >>> from datetime import datetime
  2. >>> dt = datetime.now()
  3. >>> print('(%Y-%m-%d %H:%M:%S %f): ', dt.strftime('%Y-%m-%d %H:%M:%S %f'))
  4. (%Y-%m-%d %H:%M:%S %f):  2014-08-31 23:54:58 379804
  5. >>> print('(%Y-%m-%d %H:%M:%S %p): ', dt.strftime('%y-%m-%d %I:%M:%S %p'))
  6. (%Y-%m-%d %H:%M:%S %p):  14-08-31 11:54:58 PM
  7. >>> print('%%a: %s ' % dt.strftime('%a'))
  8. %a: Sun
  9. >>> print('%%A: %s ' % dt.strftime('%A'))
  10. %A: Sunday
  11. >>> print('%%b: %s ' % dt.strftime('%b'))
  12. %b: Aug
  13. >>> print('%%B: %s ' % dt.strftime('%B'))
  14. %B: August
  15. >>> print('日期时间%%c: %s ' % dt.strftime('%c'))
  16. 日期时间%c: 08/31/14 23:54:58
  17. >>> print('日期%%x:%s ' % dt.strftime('%x'))
  18. 日期%x:08/31/14
  19. >>> print('时间%%X:%s ' % dt.strftime('%X'))
  20. 时间%X:23:54:58
  21. >>> print('今天是这周的第%s天 ' % dt.strftime('%w'))
  22. 今天是这周的第0天
  23. >>> print('今天是今年的第%s天 ' % dt.strftime('%j'))
  24. 今天是今年的第243天
  25. >>> print('今周是今年的第%s周 ' % dt.strftime('%U'))
  26. 今周是今年的第35周

复制代码

datetime 模块详解 -- 基本的日期和时间类型的更多相关文章

  1. (转)python time模块和datetime模块详解

    python time模块和datetime模块详解 原文:http://www.cnblogs.com/tkqasn/p/6001134.html 一.time模块 time模块中时间表现的格式主要 ...

  2. 详解Java8的日期和时间API

    详解Java8的日期和时间API 在JDK1.0的时候,Java引入了java.util.Date来处理日期和时间:在JDK1.1的时候又引入了功能更强大的java.util.Calendar,但是C ...

  3. python time模块和datetime模块详解

    一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...

  4. python datetime模块详解

    datetime是python当中比较常用的时间模块,用于获取时间,时间类型之间转化等,下文介绍两个实用类. 一.datetime.datetime类: datetime.datetime.now() ...

  5. time&datetime模块详解

     一.time模块 1.时间格式转换图: 2.time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.for ...

  6. Python全栈之路----常用模块----datetime模块详解

    相比于time模块,datetime模块的接口则更直观,更容易调用. datetime模块定义了下面这几个类: datetime.date:表示日期的类,常用的属性有year,month,day: d ...

  7. 【python】 time模块和datetime模块详解 【转】

    一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...

  8. time模块和datetime模块详解

    一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...

  9. day21 Pythonpython time模块和datetime模块详解

    一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...

随机推荐

  1. 每日英语:Asia Has World's Biggest Pay Gap, Study Finds

    In Asia, middle managers such as department heads make more than 14 times as much as operational emp ...

  2. 02、Universal app 中按钮图标使用

    前言,windows10 昨天凌晨发布了,windows store 开发模型比以前的 silverlight 模型由很多优势, 我也小兴奋了一把. 正文: 在 windows phone 8.0 以 ...

  3. C++函数默认参数(转)

    在代码中使用到了函数的默认参数,在函数的定义和实现中都填写的默认参数,结果出现了错误: 代码: #ifndef FIRSTPAGE_H #define FIRSTPAGE_H #include < ...

  4. jquery 获取绑定事件

    在1.8.0版本之前,我们要想获取某个DOM绑定的事件处理程序可以这样: 1 $.data(domObj,'events');//或者$('selector').data('events') 而从1. ...

  5. 读取SD卡中的图片

    Touxiang=(ImageView)view.findViewById(R.id.Touxiang); //头像Bitmap bm = BitmapFactory.decodeFile(" ...

  6. 基于HTML5堆木头游戏

    今天要来分享一款很经典的HTML5游戏——堆木头游戏,这款游戏的玩法是将木头堆积起来,多出的部分将被切除,直到下一根木头无法堆放为止.这款HTML5游戏的难点在于待堆放的木头是移动的,因此需要你很好的 ...

  7. C语言 · 素数判断

     算法提高 素数判断   时间限制:1.0s   内存限制:512.0MB      编写一函数IsPrime,判断某个大于2的正整数是否为素数. 样例输入: 5样例输出:yes 样例输入: 9样例输 ...

  8. chrome显示小于12号字体的方法

    我现在做一个支持英文的网站,但是字体要设置小于12号字体,我百度方法是-webkit-text-size-adjust:none;  但是谷歌为什么不支持啊,  有没有解决办法 让谷歌浏览器 支持小于 ...

  9. hive组件和执行过程

    转自http://blog.csdn.net/lifuxiangcaohui/article/details/40262021 对Hive的基本组成进行了总结: 1.组件: 元存储(Metastore ...

  10. Hadoop周边生态软件和简要工作原理(一)

    转自:http://www.it165.net/admin/html/201307/1531.html 基本都是在群里讨论的时候,别人问的入门问题,以后想到新的问题再补充进来.但是其实入门问题也很重要 ...