python helper函数_一天学会Python Web框架(四)工具函数

一、convert_helper.py

在common文件夹下面建立convert_helper.py文件。

convert_helper.py是类型转换包,所有字符串转数值、字符串转日期、字符串日期转时间戳等各种类型转换函数,都可以放到这里来。

#!/usr/bin/evn python

# coding=utf-8

import decimal

import datetime

#############################################

# 数值型转换函数

#############################################

def to_int(text):

"""将字符串安全转换为int类型,转换失败时默认值为0"""

try:

return int(text)

except:

return 0

def to_int0(text):

"""将字符串安全转换为int类型,当int值小于0时,返回0"""

result = to_int(text)

# 判断转换后的结果值是否小于0,是的话返回0

if not result or result < 0:

return 0

else:

return result

def to_int1(text):

"""将字符串安全转换为int类型,当int值小于1时,返回1"""

result = to_int(text)

# 判断转换后的结果值是否小于1,是的话返回1

if not result or result < 1:

return 1

else:

return result

def to_float(text):

"""将字符串安全转换为float类型"""

try:

return float(text)

except:

return 0.0

def to_decimal(text):

"""将字符串安全转换为int类型"""

try:

return decimal.Decimal(text)

except:

return 0

#############################################

# 日期型转换函数

#############################################

def to_datetime(text):

"""字符串转时间"""

if not text:

return None

# 定义字典根据时间字符串匹配不同的格式

time_dict = {

1: "%Y-%m-%d %H:%M:%S.%f",

2: "%Y-%m-%d %H:%M",

3: "%Y-%m-%d %H:%M:%S",

}

# 如果中间含有时间部分就用:判断

try:

if str(text).find('.') > -1:

return datetime.datetime.strptime(text, time_dict[1])

elif ':' in text:

time_list = text.split(':')

return datetime.datetime.strptime(text, time_dict[len(time_list)])

else:

return datetime.datetime.strptime(text, "%Y-%m-%d")

except:

return None

def to_date(text):

"""字符串转日期"""

d = to_datetime(text)

if d:

return d.date()

def to_timestamp10(text):

"""将时间格式的字符串转化为长度为10位长度的时间戳"""

d = to_datetime(text)

if d:

return int(d.timestamp())

else:

return 0

def to_timestamp13(text):

"""将时间格式的字符串转化为长度为13位长度的时间戳"""

d = to_datetime(text)

if d:

return int(d.timestamp() * 1000)

else:

return 0

比如说字符转int函数

def to_int(text):

"""将字符串安全转换为int类型,转换失败时默认值为0"""

try:

return int(text)

except:

return 0

在日常使用当中,经常会要求数值不能小于0或小于1,而to_int()函数转换时,用户如果输入了负数,虽然转换成功了,但这个值却不是我们想要的结果,如果每次都要加上一段代码对值进行判断,那会更加麻烦,所以进行了再次封装,多出来to_int0()和to_int()1两个函数。

def to_int0(text):

"""将字符串安全转换为int类型,当int值小于0时,返回0"""

result = to_int(text)

# 判断转换后的结果值是否小于0,是的话返回0

if not result or result < 0:

return 0

else:

return result

def to_int1(text):

"""将字符串安全转换为int类型,当int值小于1时,返回1"""

result = to_int(text)

# 判断转换后的结果值是否小于1,是的话返回1

if not result or result < 1:

return 1

else:

return result

to_datetime()函数,会根据输入的日期字符串格式,转换成对应的日期(如:2017-09-01)、日期时间(2017-09-01 11:11)、日期时分秒(2017-09-01 11:11:11)、日期时分秒毫秒类型(2017-09-01 11:11:11.111),得到的值是datetime类型

def test_to_datetime(self):

print('---test_to_datetime---')

print(convert_helper.to_datetime(None))

print(convert_helper.to_datetime(''))

print(convert_helper.to_datetime('xxx'))

print(convert_helper.to_datetime('2017-09-01'))

print(convert_helper.to_datetime('2017-09-01 11:11'))

print(convert_helper.to_datetime('2017-09-0111:11'))

print(convert_helper.to_datetime('2017-09-01 11:11:11'))

print(convert_helper.to_datetime('2017-09-01 11:11:11.111'))

二、datetime_helper.py

这个日期函数操作包,这个包里的函数类型主要有两大类,一种是日期类型转换,将日期类型格式化为字符串类型或转换为数值类型;另一种是对日期类型的比较或运算。

#!/usr/bin/evn python

# coding=utf-8

import time

import datetime

def to_date(dt):

"""将时间格式化为日期字符串"""

if isinstance(dt, datetime.datetime):

return dt.strftime('%Y-%m-%d')

elif isinstance(dt, datetime.date):

return dt.strftime('%Y-%m-%d')

else:

raise Exception("日期类型错误")

def to_datetime(dt):

"""将时间格式化为日期时间字符串"""

if isinstance(dt, datetime.datetime):

return dt.strftime('%Y-%m-%d %H:%M:%S')

elif isinstance(dt, datetime.date):

return dt.strftime('%Y-%m-%d')

else:

raise Exception("日期类型错误")

def to_number():

"""当前时间转换为年月日时分秒毫秒共10位数的字符串"""

return datetime.datetime.now().strftime('%Y%m%d%H%M%S')

def to_timestamp10():

"""获取当前时间长度为10位长度的时间戳"""

return int(time.time())

def to_timestamp13():

"""获取当前时间长度为13位长度的时间戳"""

return int(time.time() * 1000)

def timedelta(sign, dt, value):

"""

对指定时间进行加减运算,几秒、几分、几小时、几日、几周、几月、几年

sign: y = 年, m = 月, w = 周, d = 日, h = 时, n = 分钟, s = 秒

dt: 日期,只能是datetime或datetime.date类型

value: 加减的数值

return: 返回运算后的datetime类型值

"""

if not isinstance(dt, datetime.datetime) and not isinstance(dt, datetime.date):

raise Exception("日期类型错误")

if sign == 'y':

year = dt.year + value

if isinstance(dt, datetime.date):

return datetime.datetime(year, dt.month, dt.day)

elif isinstance(dt, datetime.datetime):

return datetime.datetime(year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond)

else:

return None

elif sign == 'm':

year = dt.year

month = dt.month + value

### 如果月份加减后超出范围,则需要计算一下,对年份进行处理 ###

# 如果月份加减后等于0时,需要特殊处理一下

if month == 0:

year = year - 1

month = 12

else:

# 对年月进行处理

year = year + month // 12

month = month % 12

if isinstance(dt, datetime.date):

return datetime.datetime(year, month, dt.day)

elif isinstance(dt, datetime.datetime):

return datetime.datetime(year, month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond)

else:

return None

elif sign == 'w':

delta = datetime.timedelta(weeks=value)

elif sign == 'd':

delta = datetime.timedelta(days=value)

elif sign == 'h':

delta = datetime.timedelta(hours=value)

elif sign == 'n':

delta = datetime.timedelta(minutes=value)

elif sign == 's':

delta = datetime.timedelta(seconds=value)

else:

return None

return dt + delta

to开头的函数都是时间类型转换函数(PS:convert_helper.py包里是对日期格式字符串转为时间类型,而datetime_helper.py里所有操作,都是对时间类型进行处理的,将它们转为其他格式)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值