当前位置: 首页 > news >正文

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两种。

略。

结尾

  1. 略的原因是当前没什么需求,从原理上看也不存在障碍,所以先不开发。关键点还是先把现有的功能在对象中实现。
  2. 接下来主要将转换和偏移的基本功能封装进ATimer2就可以完成本次的项目任务了。

相关文章:

Python一些可能用的到的函数系列123 ATimer2-时间偏移

说明 之前确定了时间轴&#xff08;千年历&#xff09;&#xff0c;以及时间的转换方法。其中时间轴的数据将会存储在集群&#xff0c;以及通过RedisOrMongo保存部分常用的数据。 本次讨论时间偏移的度量问题。 内容 1 两种形式 我们提到时间时&#xff0c;通常会有两种方…...

企业微信主体变更 怎么操作?

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

《区块链简易速速上手小册》第8章:区块链的技术挑战(2024 最新版)

文章目录 8.1 可扩展性问题8.1.1 基础知识8.1.2 主要案例&#xff1a;比特币的可扩展性挑战8.1.3 拓展案例 1&#xff1a;以太坊的可扩展性改进8.1.4 拓展案例 2&#xff1a;侧链和分层解决方案 8.2 安全性与隐私8.2.1 基础知识8.2.2 主要案例&#xff1a;比特币交易的安全性8.…...

基于STM32的云上OneNET智慧大棚(包含程序设计报告)

目录 概要 作品介绍 设计原理 设计作品结构 软件部分 概要 为了解决传统农业生产效率低下&#xff0c;消耗大量的人力物力&#xff0c;不能精确的对农作物实现监控的问题&#xff0c;从而最大限度的提高农业生产力&#xff0c;实现优质、高产、低耗、环保的可持续发展物联…...

11.scala函数进阶

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

在WebSocket中使用Redis出现空指针异常解决方案

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

问题:第十三届全国人民代表大会第四次会议召开的时间是()。 #经验分享#知识分享#媒体

问题&#xff1a;第十三届全国人民代表大会第四次会议召开的时间是&#xff08;&#xff09;。 A. 2018年3月3日至3月11日 B. 2019年3月5日至3月11日 C. 2020年3月5日至3月11日 D. 2021年3月5日至3月11日 参考答案如图所示 问题&#xff1a;顾客满意是顾客对一件产品满足…...

《区块链简易速速上手小册》第10章:区块链的未来与趋势(2024 最新版)

文章目录 10.1 区块链的未来展望10.1.1 基础知识10.1.2 主要案例&#xff1a;区块链在金融领域的发展10.1.3 拓展案例 1&#xff1a;区块链在供应链管理中的应用10.1.4 拓展案例 2&#xff1a;区块链在身份管理和隐私保护中的应用 10.2 新兴技术与区块链的融合10.2.1 基础知识1…...

JVM工作原理与实战(三十一):诊断内存泄漏的原因

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

#{}和${}的区别

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

【数据结构】(三)树Tree

目录 1、基本概念 2、二叉树Binary Tree 3、树、森林与二叉树的转换 4、赫夫曼树Huffman Tree与赫夫曼编码Huffman Coding 1、基本概念 &#xff08;1&#xff09;树&#xff08;Tree&#xff09;是 n&#xff08;n ≥\geq 1&#xff09;个节点的有限集&#xff0c;n 0时称…...

扩展坞 接两个显示器

笔记本电脑如何外接两个显示器&#xff0c;达到三个屏同时显示&#xff1f; 3 笔记本有 2 个显示扩展接口 目前笔记本中最常见的就是 1 个 HDMI 口 1 个支持 DP 协议的 Type-C 口或 2 个支持 DP 协议的 Type-C 口&#xff0c;此时使用 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); 亲爱的读者&#xff1a; 首先&#xff0c;我要感谢您抽出宝贵的时间阅读这篇文章。我深知&#xff0c;您的每一分每一…...

qemu 抓取linux kernel vmcore

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

RabbitMQ 死信队列应用

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

除毛可以用宠物空气净化器吗?猫用空气净化器哪些品牌吸毛好?

作为一位长期养猫的铲屎官&#xff0c;我深刻理解只有养猫人才懂的困扰&#xff0c;那就是家里到处都是猫毛和异味。我发现自从开始养猫之后&#xff0c;家里的空气质量变得不佳。猫毛和皮屑飞扬&#xff0c;而且室内空气中的污染物也越来越多。这种低质量的空气对我们的健康有…...

有趣的css - 好看的呼吸灯效果

整体效果 这个效果主要用 css3 的 animation 属性来实现的。 这个效果可以用作在网站的整体 Loading&#xff0c;也可以放在网站首屏当一个 banner 的背景也是非常棒的&#xff01; 代码部分 html 部分代码&#xff1a; <div class"app"><span class&quo…...

二叉树-堆应用(1)

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

猫头虎博主第10期赠书活动:《写给大家看的Midjourney设计书》

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…...

线程池相关的类学习

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

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...

职坐标物联网全栈开发全流程解析

物联网全栈开发涵盖从物理设备到上层应用的完整技术链路&#xff0c;其核心流程可归纳为四大模块&#xff1a;感知层数据采集、网络层协议交互、平台层资源管理及应用层功能实现。每个模块的技术选型与实现方式直接影响系统性能与扩展性&#xff0c;例如传感器选型需平衡精度与…...

linux设备重启后时间与网络时间不同步怎么解决?

linux设备重启后时间与网络时间不同步怎么解决&#xff1f; 设备只要一重启&#xff0c;时间又错了/偏了&#xff0c;明明刚刚对时还是对的&#xff01; 这在物联网、嵌入式开发环境特别常见&#xff0c;尤其是开发板、树莓派、rk3588 这类设备。 解决方法&#xff1a; 加硬件…...