# 一、计算两个日期内的所有月

def get_month_interval(start_str, end_str):
start_year, start_month = list(map(int, start_str.split('-')))
end_year, end_month = list(map(int, end_str.split('-')))
result = []
for year in range(start_year, end_year + 1):
year_str = str(year)
if year == end_year and year == start_year:  # 当前年份 =结束年份 and 当前年份 = 起始年份
for month in range(start_month, end_month):
date_str = year_str + '-' + str(month)
result.append(date_str)
elif year < end_year and year == start_year:  # 当前年份<结束年份 and 当前年份 = 起始年份
for month in range(start_month, 13):
date_str = year_str + '-' + str(month)
result.append(date_str)
elif year < end_year and year != start_year:  # 当前年份<结束年份 and 当前年份 != 起始年份
for month in range(1, 13):
date_str = year_str + '-' + str(month)
result.append(date_str)
else:  # 当前年份 = 结束年份 and 当前年份 != 起始年份
for month in range(1, end_month + 1):
date_str = year_str + '-' + str(month)
result.append(date_str)
return result


>>> get_month_interval('2015-11','2016-2')
['2015-11', '2015-12', '2016-1', '2016-2']


# 二、计算两个日期之间的差值

def get_date_diff(start_str, end_str):
import datetime
start = datetime.datetime.strptime(start_str, '%Y-%m-%d %H:%M:%S.%f')
end = datetime.datetime.strptime(end_str, '%Y-%m-%d %H:%M:%S.%f')
diff = end - start
# 相差天数
print('相差天数：', diff.days)
# 相差秒数
print('相差秒数：', diff.seconds)
# 相差微秒数
print('相差微秒数：', diff.microseconds)


>>> get_date_diff('2016-1-25 23:59:59.100','2016-2-27 22:58:58.50')



# 三、计算当前时间延后指定时间的日期

>>> compute_date(days=1,weeks=2)
2016-11-19 15:24:41.203940
2016-12-04 15:24:41.203940

#计算经过两周一天之后的日期
>>> compute_date(days=1,weeks=2)
2016-11-19 15:24:41.203940
2016-12-04 15:24:41.203940


# 四、其他

# 把UTC时间转本地时间from datetime import datetime
from dateutil import tz

# METHOD 1: Hardcode zones:
from_zone = tz.gettz('UTC')
to_zone = tz.gettz('America/New_York')

# METHOD 2: Auto-detect zones:
from_zone = tz.tzutc()
to_zone = tz.tzlocal()

# utc = datetime.utcnow()
utc = datetime.strptime('2011-01-21 02:37:21', '%Y-%m-%d %H:%M:%S')

# Tell the datetime object that it's in UTC time zone since
# datetime objects are 'naive' by default
utc = utc.replace(tzinfo=from_zone)

# Convert time zone
central = utc.astimezone(to_zone)


# 五、时间日期格式化符号

%y 两位数的年份表示（00-99）
%Y 四位数的年份表示（000-9999）
%m 月份（01-12）
%d 月内中的一天（0-31）
%H 24小时制小时数（0-23）
%I 12小时制小时数（01-12）
%M 分钟数（00=59）
%S 秒（00-59）
%f  毫秒（小数点后6位）

%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天（001-366）
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数（00-53）星期天为星期的开始
%w 星期（0-6），星期天为星期的开始
%W 一年中的星期数（00-53）星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

# datetime模块

•datetime.date：表示日期的类。常用的属性有year, month, day；
•datetime.time：表示时间的类。常用的属性有hour, minute, second, microsecond；
•datetime.datetime：表示日期时间。
•datetime.timedelta：表示时间间隔，即两个时间点之间的长度。
•datetime.tzinfo：与时区有关的相关信息。（这里不详细充分讨论该类，感兴趣的童鞋可以参考python手册）

date类
date类表示一个日期。日期由年、月、日组成（地球人都知道~~）。date类的构造函数如下：

class datetime.date(year, month, day)：参数的意义就不多作解释了，只是有几点要注意一下：

•year的范围是[MINYEAR, MAXYEAR]，即[1, 9999]；
•month的范围是[1, 12]。（月份是从1开始的，不是从0开始的~_~）；
•day的最大值根据给定的year, month参数来决定。例如闰年2月份有29天；
date类定义了一些常用的类方法与类属性，方便我们操作：

•date.max、date.min：date对象所能表示的最大、最小日期；
•date.resolution：date对象表示日期的最小单位。这里是天。
•date.today()：返回一个表示当前本地日期的date对象；
•date.fromtimestamp(timestamp)：根据给定的时间戮，返回一个date对象；
•datetime.fromordinal(ordinal)：将Gregorian日历时间转换为date对象；（Gregorian Calendar：一种日历表示方法，类似于我国的农历，西方国家使用比较多，此处不详细展开讨论。）

date提供的实例方法和属性：

•date.year、date.month、date.day：年、月、日；
•date.replace(year, month, day)：生成一个新的日期对象，用参数指定的年，月，日代替原有对象中的属性。（原有对象仍保持不变）
•date.timetuple()：返回日期对应的time.struct_time对象；
•date.toordinal()：返回日期对应的Gregorian Calendar日期；
•date.weekday()：返回weekday，如果是星期一，返回0；如果是星期2，返回1，以此类推；
•data.isoweekday()：返回weekday，如果是星期一，返回1；如果是星期2，返回2，以此类推；
•date.isocalendar()：返回格式如(year，month，day)的元组；
•date.isoformat()：返回格式如'YYYY-MM-DD'的字符串；
•date.strftime(fmt)：自定义格式化字符串。在下面详细讲解。

posted @ 2016-11-19 15:32 大诗人 阅读(...) 评论(...) 编辑 收藏