Python一些可能用的到的函数系列123 ATimer2-时间偏移
说明
之前确定了时间轴(千年历),以及时间的转换方法。其中时间轴的数据将会存储在集群,以及通过RedisOrMongo保存部分常用的数据。
本次讨论时间偏移的度量问题。
内容
1 两种形式
我们提到时间时,通常会有两种方式:
- 1 按照名义日历,例如月末、年末。
- 2 按照绝对间隔,例如10分钟后,2天后。
第一种应用通常出现在报表需求上,例如,在每个月1号,统计上个月(周期描述)的所有交易额。这个时候,名义的描述是准确的,但是每个月有大小月,还有平闰月。这种需求,通过名义时间轴就可以较容易的处理。之类应用的间隔,可以以"c"开头,意味着字符推断,或者日历推算。
第二种应用通常出现在程序执行上,例如,每分钟执行一次程序;或5分钟后执行某个程序。
就时间的描述来说,又存在两种方式:
- 1 某个时间点。
- 2 某个时间段。
所以以下分为四种情况加以讨论:
- 1 字符·时间点
- 2 字符·时间段
- 3 数值·时间点
- 4 数值·时间段
2 字符·时间点
具体的语言描述可能会有更多可能,以下仅描述几种常用的,需要的以后再加就可以了。
2.1 end_of_last_month
采用当月时间再前推一天
严格来说是end day of last month。
假设已经有了yymon_dict
,这是由每个月首日与对应时间戳构成的有序字典。
将键拿出来,构成列表
time_axis = np.array(list(yymon_dict.values()))
dt_axis = list(yymon_dict.keys())
其中dt_axis
是字符型的日期列表,time_axis
是对应的时间戳。
给定任意一个时间,推算上个月的时间点
# 任意字符串时间
some_dt_str = '2024-01-31 11:11:11'
# 从字符串时间中提取月初、日时分秒
yymon, dhms =depart_mon_ddhhmmss(some_dt_str)
# 推算月初的上一日
month_ts = yymon_dict[yymon] - 86400
# 以下是ATimer2-时间转换部分的过程,之后会封装
# 将时间戳转为字符
# 获取目标时间戳的最近一个月位置
pos= max(np.where(time_axis <= month_ts)[0])
# 获取月份的基础字符串
base_dt = dt_axis[pos]
# 获取月份的基础时间戳
base_ts = time_axis[pos]
# 计算当前时间戳和月基础时间戳的差距
gap_ts = month_ts - base_ts
# 计算月内的偏移时间字符串,然后拼接
char_ts = base_dt[:7] + gapts2day(gap_ts)
'2023-12-31 00:00:00'
整个过程还是以查表和简单四则运算进行推算进行的,速度应该会比较快。
时间的转换还是一个更底层的功能,之后开始组装对象时,这个转换过程会比较快。
2.2 approximate_day_of_last_month
略
2.3 end_of_next_month
往下推两个月,然后再回退一天
some_dt_str = '2024-01-31 11:11:11'
yymon, dhms =depart_mon_ddhhmmss(some_dt_str)# 下下个月:通过时间轴的位置索引推算
nn_month_pos = dt_axis.index(yymon) + 2
nn_month = dt_axis[nn_month_pos]month_ts = yymon_dict[nn_month] - 86400# 将时间戳转为字符
pos= max(np.where(time_axis <= month_ts)[0])
base_dt = dt_axis[pos]
base_ts = time_axis[pos]
gap_ts = month_ts - base_ts
char_ts = base_dt[:7] + gapts2day(gap_ts)
'2024-02-29 00:00:00'
3 字符·时间段
3.1 last_month_period
获取当月月初,和上月月初,推算中间的时隙即可
略
4 数值·时间点
默认按照左闭右开原则
4.1 last_n: 可选参为day, hour, minute, seconds,默认为0
原则上,在使用数值点判定时要求输入是数值(时间戳)。出于使用的方便,我们可以假定,用户可以指定字符或者数值,由对象内部进行自动转换。
假定,用户给到了字符,在有yymon_dict的情况下,很容转为时间戳
# 字符到时间戳
some_dt_str = '2024-01-31 11:11:11'
yymon, dhms =depart_mon_ddhhmmss(some_dt_str)
ts = yymon_dict[yymon] + ddhhmmss2s(dhms)
执行时间偏移
# 过去3天
last_n = 3
# 历史时间推算已完成
ts_hat = ts - last_n * 86400
再将时间戳进行转换
# 时间戳到字符
# 1 月日字符列表
# 2 推算位置
pos= max(np.where(time_axis <= ts_hat)[0])
base_dt = dt_axis[pos]
base_ts = time_axis[pos]
gap_ts = ts_hat - base_ts
char_ts = base_dt[:7] + gapts2day(gap_ts)
'2024-01-28 11:11:11'
4.2 next_n:可选参为day, hour, minute, seconds,默认为0
略
5 数值·时间段
5.1 last_n_period
略
5.2 next_n_period
略
5.3 period_btw
略
计算两个时间点之间的时间段
6 选择
时间操作一定会伴随着选择:选择数据中符合要求的记录。
6.1 对于点
进行筛选的规则为 gt, lt , eq, gte, lte 等五种。
略。
6.2 对于区间 period
一般来说分为 in 和out两种。
略。
结尾
- 略的原因是当前没什么需求,从原理上看也不存在障碍,所以先不开发。关键点还是先把现有的功能在对象中实现。
- 接下来主要将转换和偏移的基本功能封装进ATimer2就可以完成本次的项目任务了。
相关文章:

Python一些可能用的到的函数系列123 ATimer2-时间偏移
说明 之前确定了时间轴(千年历),以及时间的转换方法。其中时间轴的数据将会存储在集群,以及通过RedisOrMongo保存部分常用的数据。 本次讨论时间偏移的度量问题。 内容 1 两种形式 我们提到时间时,通常会有两种方…...

企业微信主体变更 怎么操作?
企业微信变更主体有什么作用?当我们的企业因为各种原因需要注销或已经注销,或者运营变更等情况,企业微信无法继续使用原主体继续使用时,可以申请企业主体变更,变更为新的主体。企业微信变更主体的条件有哪些࿱…...

《区块链简易速速上手小册》第8章:区块链的技术挑战(2024 最新版)
文章目录 8.1 可扩展性问题8.1.1 基础知识8.1.2 主要案例:比特币的可扩展性挑战8.1.3 拓展案例 1:以太坊的可扩展性改进8.1.4 拓展案例 2:侧链和分层解决方案 8.2 安全性与隐私8.2.1 基础知识8.2.2 主要案例:比特币交易的安全性8.…...

基于STM32的云上OneNET智慧大棚(包含程序设计报告)
目录 概要 作品介绍 设计原理 设计作品结构 软件部分 概要 为了解决传统农业生产效率低下,消耗大量的人力物力,不能精确的对农作物实现监控的问题,从而最大限度的提高农业生产力,实现优质、高产、低耗、环保的可持续发展物联…...

11.scala函数进阶
目录 概述函数scala函数和方法的区别第一种第二种方法转函数 函数柯里化 结束 概述 函数 vs 方法 1.定义 方法:def函数:> 2.方法本质上是一个特殊的函数3.函数是一等公民,函数可以当做值来传递,方法的参数,返回值…...

在WebSocket中使用Redis出现空指针异常解决方案
文章目录 在WebSocket中使用Redis1.问题描述2.原因3.解决步骤1.新建一个SpringUtil.java类,通过getBean的方法主动获取实例2.在WebSocketSingleServer.java中导入 在WebSocket中使用Redis 1.问题描述 在controller 和 service中都可以正常使用Redis,在…...

问题:第十三届全国人民代表大会第四次会议召开的时间是()。 #经验分享#知识分享#媒体
问题:第十三届全国人民代表大会第四次会议召开的时间是()。 A. 2018年3月3日至3月11日 B. 2019年3月5日至3月11日 C. 2020年3月5日至3月11日 D. 2021年3月5日至3月11日 参考答案如图所示 问题:顾客满意是顾客对一件产品满足…...

《区块链简易速速上手小册》第10章:区块链的未来与趋势(2024 最新版)
文章目录 10.1 区块链的未来展望10.1.1 基础知识10.1.2 主要案例:区块链在金融领域的发展10.1.3 拓展案例 1:区块链在供应链管理中的应用10.1.4 拓展案例 2:区块链在身份管理和隐私保护中的应用 10.2 新兴技术与区块链的融合10.2.1 基础知识1…...

JVM工作原理与实战(三十一):诊断内存泄漏的原因
专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、诊断原因 二、MAT内存泄漏检测的原理 总结 前言 JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线…...

#{}和${}的区别
#{}和${}的区别 .本质区别:使用注意事项防止SQL注入排序like查询 . 在使用mybatis操作数据库的时候,我们在编写sql语言的时候,会遇到一个问题,就是在传参的时候,有两个符号#,$.这两个符号有什么异同呢,接下来,我就会带着大家对这个问题进行简单的探讨 本质区别: #执行的是预编…...

【数据结构】(三)树Tree
目录 1、基本概念 2、二叉树Binary Tree 3、树、森林与二叉树的转换 4、赫夫曼树Huffman Tree与赫夫曼编码Huffman Coding 1、基本概念 (1)树(Tree)是 n(n ≥\geq 1)个节点的有限集,n 0时称…...

扩展坞 接两个显示器
笔记本电脑如何外接两个显示器,达到三个屏同时显示? 3 笔记本有 2 个显示扩展接口 目前笔记本中最常见的就是 1 个 HDMI 口 1 个支持 DP 协议的 Type-C 口或 2 个支持 DP 协议的 Type-C 口,此时使用 HDMI 线和 Type-C 转接线分别直连两台显…...

鸿蒙 ArkTS 从数组内查找指定的数据
let arr [1, 2, 3, 4, 5]; let target 3; let result arr.filter(item > item target); let a String(result) 将数字转换成文本型 console.log(a); 亲爱的读者: 首先,我要感谢您抽出宝贵的时间阅读这篇文章。我深知,您的每一分每一…...

qemu 抓取linux kernel vmcore
一、背景 在qemu调试linux kernel时 有时我们会遇到dump 情况,这时可以通过gdb 方式连接分析dump, 但实际中我们用得更多的是离线dump 分析,分析的文件通常是vmcore(linux kernel panic 生成的coredump文件)或者ramdu…...

RabbitMQ 死信队列应用
1. 概念 死信队列(Dead Letter Queue)是在消息队列系统中的一种特殊队列,用于存储无法被消费的消息。消息可能会因为多种原因变成“死信”,例如消息过期、消息被拒绝、消息队列长度超过限制等。当消息变成“死信”时,…...

除毛可以用宠物空气净化器吗?猫用空气净化器哪些品牌吸毛好?
作为一位长期养猫的铲屎官,我深刻理解只有养猫人才懂的困扰,那就是家里到处都是猫毛和异味。我发现自从开始养猫之后,家里的空气质量变得不佳。猫毛和皮屑飞扬,而且室内空气中的污染物也越来越多。这种低质量的空气对我们的健康有…...

有趣的css - 好看的呼吸灯效果
整体效果 这个效果主要用 css3 的 animation 属性来实现的。 这个效果可以用作在网站的整体 Loading,也可以放在网站首屏当一个 banner 的背景也是非常棒的! 代码部分 html 部分代码: <div class"app"><span class&quo…...

二叉树-堆应用(1)
目录 堆排序 整体思路 代码实现 Q1建大堆/小堆 Q2数据个数和下标 TopK问题 整体思路 代码实现 Q1造数据CreateData Q2建大堆/小堆 建堆的两种方法这里会用到前面的向上/向下调整/交换函数。向上调整&向下调整算法-CSDN博客 堆排序 整体思路 建堆(直…...

猫头虎博主第10期赠书活动:《写给大家看的Midjourney设计书》
博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…...

线程池相关的类学习
Executor public interface Executor {//执行任务void execute(Runnable command); }ExecutorService public interface ExecutorService extends Executor {//关闭线程池,不能再向线程池中提交任务,已存在与线程池中的任务会继续执行,直到…...

Redis核心技术与实战【学习笔记】 - 9.如何避免单线程模型的阻塞
概述 Redis 被广泛应用的原因是因为它支持高性能访问。所以,我们要重视所有可能影响 Redis 性能的因素(如命令操作、系统配置、关键机制、硬件配置等)。 影响 Redis 性能的 5 大方面的潜在因素分别是: Redis 内部的阻塞式操作C…...

如何在 JavaScript 中使用 map() 迭代数组
简介 从经典的 for 循环到 forEach() 方法,JavaScript 中有各种技术和方法用于遍历数据集。其中最流行的方法之一是 .map() 方法。.map() 通过在父数组的每个项目上调用特定函数来创建一个数组。.map() 是一个非变异方法,它创建一个新数组,而…...

学习JavaEE的日子 Day19 常用类
Day19 1.包装类的使用 理解:8种基本数据类型对应类 出现原因: Java为纯面向对象语言(万物皆对象),8种基本数据类型不能new对象, 就破坏Java为纯面向对应语言的特征,Java又为8种基本数据类型分别 匹配了对应的…...

25考研政治备考计划
各位小伙伴大家好,今天给大家分享的是25考研政治复习备考计划。 政治没有基础阶段,直接就是强化,强化的内容也就是听课,刷题。 【时间安排】 *7-9月中 徐涛老师或腿姐强化课,推荐刷肖1000 *9月中-10月中 背腿姐的背…...

漏洞01-目录遍历漏洞/敏感信息泄露/URL重定向
目录遍历漏洞/敏感信息泄露/URL重定向 文章目录 目录遍历敏感信息泄露URL重定向 目录遍历 敏感信息泄露 于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到。 比如: ---通过访问url下的目录,可以直接列出目录下…...

软件工程知识梳理4-详细设计
详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说.经过这个阶段的设计工作.应该得出对目标系统的精确描述.从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。 详细设计的的目标不仅仅是逻辑上正确地实现每个模块地功能&a…...

Spring Boot3,启动时间缩短 10 倍!
前面松哥写了一篇文章和大家聊了 Spring6 中引入的新玩意 AOT(见Spring Boot3 新玩法,AOT 优化!)。 文章发出来之后,有小伙伴问松哥有没有做性能比较,老实说,这个给落下了,所以今天…...

Picturesocial | 只要 5 分钟,发现容器编排的秘密武器!
在上一篇文章《Picturesocial | 开发实践:如何在 15 分钟内将应用容器化》,我们讨论了容器以及容器化应用程序所需的步骤。在不考虑将 container 部署到哪里的情况下创建 container,就像把家放在漂浮在海中的货运集装箱里一样,听起…...

GEE数据集——Umbra 卫星合成孔径雷达开放数据
Umbra 合成孔径雷达开放数据 Umbra 卫星生成的合成孔径雷达图像分辨率最高(优于 25 厘米/10 英寸)。合成孔径雷达卫星可以在夜间、透过云层、烟雾和雨水捕捉图像。合成孔径雷达具有监测变化的独特能力。开放数据计划(ODP)对全球十个不同地点进行监测。经常更新新图像。ODP …...

一个vue项目中通过iframe嵌套另外一个vue项目,如何让这两个项目进行通信
文章目录 需求分析父传子子传父 需求 一个vue项目中通过iframe嵌套另外一个vue项目,如何让这两个项目之间进行通信 分析 在Vue项目中通过iframe嵌套另外一个Vue项目时,可以通过postMessage方法实现这两个项目之间的通信。postMessage是HTML5新增加的API…...