一、去除字符串的中文、英文
def remove_letters_and_chinese(self,text):
"""字符串去除字母與中文"""
import re
pattern = r'[\u4e00-\u9fa5a-zA-Z]'
result = re.sub(pattern, '', text)
return result
二、根據時分來判斷是當天還是第二天
def set_format_datetime(self,type, date1, date2): """
str_date1='2023-06-27'
str_date2='23:30'
""" from datetime import datetime, timedelta str_date1 = self.remove_letters_and_chinese(date1) str_date2 = self.remove_letters_and_chinese(date2) if type == 'next': dt = datetime.strptime(f"{str_date1} {str_date2}", "%Y-%m-%d %H:%M") else: ql_house = int(str_date2.split(':')[0]) if 13 < ql_house < 24: date_obj = datetime.strptime(str_date1, '%Y-%m-%d') next_day = date_obj - timedelta(days=1) dt = datetime.strptime(f"{next_day.strftime('%Y-%m-%d')} {str_date2}", "%Y-%m-%d %H:%M") else: dt = datetime.strptime(f"{str_date1} {str_date2}", "%Y-%m-%d %H:%M") print('=====dt====----------9999---------------===', dt) return dt.strftime("%Y-%m-%d %H:%M:%S")
三、獲取兩個時分的時間差
def get_on_bed_time(self, start_time, end_time): from datetime import datetime, timedelta # 將時間字符串轉換爲datetime對象 start_time = self.remove_letters_and_chinese(start_time) end_time = self.remove_letters_and_chinese(end_time) dt1 = datetime.strptime(start_time, '%H:%M') dt2 = datetime.strptime(end_time, '%H:%M') # 如果dt2比dt1大,說明時間跨越了一天,需要將dt2加上一天 if dt2 < dt1: dt2 += timedelta(days=1) # 計算時間差 delta = dt2 - dt1 # 將時間差轉換爲小時數 hours = delta.seconds // 3600 # # 將時間差轉換爲分鐘數 minutes = delta.seconds // 60 print(f"時間差爲{hours}小時或{minutes}分鐘") return delta.seconds
四、日期的加減加一天減一天
def set_report_date(self, date1): """獲取日期""" from datetime import datetime, timedelta date_obj = datetime.strptime(date1, '%Y-%m-%d') next_day = date_obj - timedelta(days=1) return next_day.strftime("%Y-%m-%d")
五、獲取區間中的日期
def get_dates_between(self, start_date, end_date): """獲取區間中的日期""" from datetime import datetime, timedelta dates = [] current_date = datetime.strptime(str(start_date), "%Y-%m-%d") end_date = datetime.strptime(str(end_date), "%Y-%m-%d") while current_date <= end_date: dates.append(current_date.strftime("%Y-%m-%d")) current_date += timedelta(days=1) return dates
六、write與create常見的操作
class Job(models.Model): _inherit = 'hr.job' group_id = fields.Many2one('res.groups', string=u'崗位權限', domain=[('is_job_group', '=', True)]) job_user_ids = fields.Many2many('res.users', 'zimo_m2m_job_user', string=u'崗位人員') @api.model def _on_create_job_user_changed(self, job): if job.group_id and job.job_user_ids: job.group_id.write({'users': [(4, job_user.id) for job_user in job.job_user_ids]}) @api.model def _on_write_job_user_changed(self, job, add_user_list, remove_user_list): if job.group_id: # 獲取當前崗位下已有的用戶列表 # 根據新增的崗位人員將人員添加到權限組中 added_users = add_user_list if added_users: job.group_id.write({'users': [(4, user.id) for user in added_users]}) # 根據刪除的崗位人員將人員從權限組中刪除 removed_users = remove_user_list if removed_users: job.group_id.write({'users': [(3, user.id) for user in removed_users]}) @api.model_create_multi def create(self, vals_list): jobs = super(Job, self).create(vals_list) for job in jobs: group_vals = { 'name': job.name, 'category_id': self.env.ref('zimo_increment_base.module_zimo_job_title').id, 'implied_ids': [(6, 0, [self.env.ref('base.group_user').id])], 'is_job_group': True, 'users': [(4, user.id) for user in job.job_user_ids if job.job_user_ids], } job.group_id = self.env['res.groups'].create(group_vals) self._on_create_job_user_changed(job) return jobs def write(self, vals): old_job_user_ids = self.job_user_ids res = super(Job, self).write(vals) new_job_user_ids = self.job_user_ids add_user_list = [i for i in new_job_user_ids if i not in old_job_user_ids] remove_user_list = [i for i in old_job_user_ids if i not in new_job_user_ids] # 分別做操作 if 'group_id' in vals or 'job_user_ids' in vals: for job in self: self._on_write_job_user_changed(job, add_user_list, remove_user_list) return res