目录

  • 目标
  • 代码
  • 效果

目标

业务统计需要按照自然周看数据,所以把每天计算都归到自然周。
展示的时候用自然周的周一来代替自然周展示。
odps 没有计算自然周的函数,所以用 Python 做了一个 udf 来实现。
一年的第一天是周一,那么这一年的自然周就是以01开始,否则是以00,
这个在计算对应的周一时会产生问题,针对跨年周做了兼容处理。
似乎 MySQL 在计算自然周的时候也有类似问题,这里没有细查。

代码

from odps.udf import annotate
import datetime@annotate("string->string")
class get_year_week(object):def evaluate(self, arg):try :ds_date = datetime.datetime.strptime(arg, '%Y%m%d')yw = '{}'.format(ds_date.strftime("%Y%W"))if yw[-2:] == '00':ds_date = ds_date + datetime.timedelta(days=1 - ds_date.isoweekday())yw = '{}'.format(ds_date.strftime("%Y%W"))return ywexcept:return None@annotate("string->string")
class get_year_week_day(object):def evaluate(self, yearsweek):iosweekday=1try :year = yearsweek[:4]# if 0101 is monday, the yearweek will begin on 01,need mines 1if datetime.datetime.strptime(year, '%Y').isoweekday() == 1:week_num = int(yearsweek[-2:]) - 1else:week_num = int(yearsweek[-2:])monday_of_the_week = datetime.datetime.strptime(year, '%Y') + datetime.timedelta(days=7 * week_num)# if monday_of_the_week.isoweekday() != iosweekday:monday_of_the_week = monday_of_the_week + datetime.timedelta(days=iosweekday - monday_of_the_week.isoweekday())return monday_of_the_week.strftime('%Y%m%d')except:return None

效果

select date1,yearweek(date1),yearweekday(yearweek(date1)) monday
from date_list;
date1 _c1 monday
20180221 201808 20180219
20181231 201853 20181231
20190101 201853 20181231
20190106 201853 20181231
20190107 201901 20190107
20190108 201901 20190107
20191231 201952 20191230
20200101 201952 20191230
20201231 202052 20201228
20210101 202052 20201228
20211231 202152 20211227
20220101 202152 20211227

pyudf 计算自然周和当周周一相关推荐

  1. mysql 计算自然周

    mysql 计算自然周距离现在多少周的方法 set @install = '2020-10-24 18:00:00'; select @install, date_format(@install - ...

  2. oracle判断为周一_oracle根据四位年周取当周周一的日期函数

    create or replace function FUNC_GET_DATE_BY_WEEK ( theYearWeek IN VARCHAR2 ) return date is normalDa ...

  3. PHP获取自然周日期(周一~周日)

    使用date()函数:PHP: date - Manual w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六) $time = time(); // 可设定日期$week_day_nu ...

  4. PHP获取自然周始末时间

    之前做了一个项目做抽奖的,里面有个需求,每个用户每个自然周能抽中一次指定产品. 自然周指的是:从周一到周日算作一个自然周. 但是作为PHP中的lower,还是能力捉急,只好百度 还挺多的嘛!想也不想先 ...

  5. 自定义周次开始时间,结束时间,计算一年中的周次(非自然周次)

    自定义周次开始时间,结束时间,计算一年中的周次(非自然周次),从数据库中读取时间,然后以此时间为开始时间,并且为第一周周一的开始时刻,每过7天 累计为一周,同时算出周次的开始日期和结束日期. pack ...

  6. 查询某一日期所在的自然周,以周一为开始

    查询某一日期所在的自然周,以周一为开始 代码如下: import java.text.SimpleDateFormat; import java.util.Calendar; import java. ...

  7. php获取当前日期所在自然周周一周末以及前后自然周始末

    php获取当前日期所在自然周周一周末以及前后自然周始末 首先,获取当前时间,date函数,方法较多,展示一种: $present = date('y-m-d',time());//当前日期 然后获取当 ...

  8. python3--日期时间处理最近n个自然周计算

    第一部分:最近n个自然周计算 算法逻辑: 1.12日是星期三,近一自然周是从1.10开始的日期,中间相差2天 1.13日是星期四,近一自然周是从1.10开始的日期,中间相差3天 1.14日是星期五,近 ...

  9. Java 周日期计算工具,获取当前第几周,按周数获取周一至周日,按日期获取周一至周日

    记一个自己写的工具类: 1.按时间获取当前第几周 getzs 3.按日期获取周一至周日getgetBetweenDates2 4.按年份跟周数获取周一至周日 getgetBetweenDates3 结 ...

最新文章

  1. 直方图(opencv)
  2. asp.net 在 Ngnix 服务器 中配置攻略
  3. Why to do,What to do,Where to do 与 Lambda表达式!
  4. 如何进入python程序代码编辑环境_Python怎么打开代码编辑器 来学习吧
  5. 使用Cocoapods快速创建自己的podspec,让你的框架支持cocoapods,podspec
  6. find之exec和args
  7. react jsoneditor 的学习使用
  8. 分别使用docx4j,jacob将文字与图片插入word中书签位置
  9. winrar去弹窗广告激活办法!!
  10. 10.计算机基础之程序设计基础
  11. SQL注入实战 绕WTS-WAF
  12. OpenCV物体颜色检测(Python)
  13. 局域网计算机网卡启动,远程启动局域网内电脑
  14. 【投屏】Scrcpy源码分析四(最终章 - Server篇)
  15. Python工程师月薪15K以上,Python能做机器学习吗?
  16. 微信公众号加外链怎么不管用——已解决
  17. form表单的submit()和onsubmit()的区别
  18. 微信强制加入群软件!易语言协议版,公开源码
  19. One-Lin3r:懒人的福音,渗透测试单行化工具
  20. 印度区块链项目Matic Network的应用场景分析

热门文章

  1. Win10下音频设备无法播放音乐问题定位
  2. Python代码实现-主成分分析(PCA)降维及故障诊断中的T2和SPE统计量Matplotlib出图|Python技能树征题
  3. 《流量的秘密》读后感
  4. VS2019 C++的跨平台开发——Linux开发
  5. java输出的时候出现[Ljava.lang.String是什么意思+解决方法
  6. 【C语言】用函数实现求两个自然数的最大公约数
  7. 基于Android实现之智慧记单词APP【100011028】
  8. 计算机中文速记四级在哪里考试,计算机中文速记员国家标准要求
  9. 只狼:影逝二度PC官方中文版启动测试
  10. 输出 [2,100] 范围内所有的质数及质数的个数