excel 无法正确处理 1900-03-01 前的日期

问题由来:excel 用公式 =TEXT(A1,"yyyy-mm-dd") 转日期时,当A1 的值等于59 的时候,返回值是1900-02-28;当A1 的值等于61 的时候,返回值是1900-03-01;那么当 A1的值为 60 的时候,返回值是多少?

根据给出的信息,当A1的值为59时,返回值是1900-02-28,而当A1的值为61时,返回值是1900-03-01。这意味着A1的值每增加1,日期增加一天。

因此,当A1的值为60时,日期应该是在1900-02-28和1900-03-01之间的一天,即1900-02-29。

但是,需要注意的是1900年并不是闰年,所以1900年没有2月29日。在这种情况下,Excel通常会将日期调整到下一天,即1900-03-01。

然而,根据题目中的描述,我们假设Excel在这里的处理方式是简单地忽略闰年规则,将日期直接加一天。

因此,当A1的值为60时,返回值将是1900-02-29。

在Excel中,日期是从1900年1月1日开始计算的,其中1900年1月1日对应序号1。Excel错误地将1900年当作闰年来处理,实际上1900年并不是闰年。这导致2月29日被错误地认为是有效日期。

当A1的值为59时,对应的日期是1900-02-28,增加1变为60,按照正常逻辑应当是1900-03-01,但由于Excel的这个错误,它会将1900年2月29日作为一个有效的日期来处理。

因此,当A1的值为60时,由于Excel的错误处理,返回值会错误地显示为1900-02-29,即使这一天在现实中并不存在。

所以确实可以认为这是一个BUG,但这是Excel的一个已知问题,而且是一个历史性的问题,自Excel最初版本以来就存在,并且在后续版本中为了兼容性的原因一直保留至今。

返回值是1900-02-29。

DateDiff("d", "1899-12-31", "1900-3-1") 返回值 60 是错误的,

DateDiff 函数的本意是计算两个日期之间的差值,通常不会考虑日期系统误差。然而,由于Excel中1900年日期系统的错误处理,导致在计算涉及1900年2月的日期差值时会出现问题。在这个具体的例子中:

DateDiff("d", "1899-12-31", "1900-3-1") 应该计算的是从1899年12月31日到1900年3月1日之间的天数。
正常情况下,这应该是61天(1月份31天 + 2月份28天 + 3月1日),因为1900年不是闰年。
但是由于Excel错误地将1900年作为闰年处理,它认为2月有29天,因此返回了错误的天数60。
这个问题没有直接的解决办法,因为它根植于Excel的底层日期处理机制。当使用DateDiff函数计算包含1900年2月的日期差值时,需要手动调整结果以抵消这个错误。

此外,在使用DateDiff进行日期差值计算时,应当注意以下几点:

确保日期正确:检查所有日期数据确保其准确性,特别是涉及到1900年的日期。
避免使用1900年2月的日期:在可能的情况下,避免使用1900年2月的日期作为计算范围的一部分,以免产生错误的结果。
手动调整:如果必须使用1900年的日期,可能需要在计算后手动调整结果以反映实际的日期差值。

DateDiff("d", 0, "1900-1-1") 返回值是 2 也是错误的。

Excel中的日期是从1900年1月1日开始计算的,其中1900年1月1日被当作第1天。因此,当使用DateDiff函数计算从基准日期(即1900年1月1日)到"1900-1-1"这一日期之间的天数差时,实际上就是在计算基准日期自身,所以结果是0。但是,由于某些原因,可能是由于四舍五入或内部处理误差,Excel错误地返回了2。

DATEVALUE("1900-02-29") 返回值是 60 ,是什么BUG?

这是由于Excel的日期系统BUG导致的。

在Excel中,日期是以一种称为序列号的数字形式存储的,起始点是1900年1月1日。理论上,1900年2月29日应该是第60天的序列号,因为1900年并不是一个闰年。但是,Excel错误地将1900年视为闰年,因此它将2月29日计入了序列号中。这就是为什么DATEVALUE("1900-02-29")返回值是60的原因。

这个BUG源于Excel最初的设计决策,当时并没有考虑到1900年实际上不是闰年。这一错误一直保留至今,尽管后续版本的Excel已经可以正确处理大多数日期问题。

需要注意的是,在使用DATEVALUE函数时,需要确保输入的日期文本格式正确,否则可能会遇到错误或不一致的结果。例如,如果电脑系统时间设置与Excel中的日期格式不匹配,可能会导致一些日期函数无法正常工作。

Excel 无法正确处理 1900-03-01 前的日期

主要是因为它使用了 1900 年作为日期的起始点。这导致了一些与现实不符的情况,例如将 1900 年错误地视为闰年。

为了解决这个问题,可以采取以下措施:

使用正确的日期格式:确保输入的日期符合正确的格式,如 "YYYY-MM-DD"。这可以帮助 Excel 正确解析和处理日期数据。
避免使用 1900 年 2 月 29 日:由于 Excel 错误地将 1900 年视为闰年,因此应避免使用该日期进行计算。可以选择其他日期或手动调整结果以纠正误差。
使用其他工具或编程语言:如果需要进行复杂的日期计算或处理大量数据,可以考虑使用其他工具或编程语言,如 Python 或 R。这些工具通常具有更强大的日期处理功能,并且不受 Excel 的限制。
更新系统设置:在某些情况下,可能需要更新操作系统或 Excel 的设置以解决日期问题。例如,某些版本的 Windows 可能需要更新以解决与 1900 年 2 月 29 日相关的问题。
总之,虽然 Excel 在处理日期方面存在一些限制和问题,但通过采取适当的措施,仍然可以有效地处理和计算日期数据。

本来计划自己写个程序将字符串日期转换为Excel默认的日期计数值,但是因为以上问题,无法得到正确的结果,代码如下:

Public Function StrDT2Long(d, Optional n = "d") As Long
    Dim S As String, SS
    SS = "1899-12-31"
    S = CStr(d)
    StrDT2Long = DateDiff(n, SS, S)
End Function

以上函数能正确处理 1900-1-1 到 1900-2-28 之前的日期输入,但是之后的就是错误的,结果少了1。于是乎进行修改,将 SS 改为 0 :

Public Function StrDT2Long(d, Optional n = "d") As Long
    Dim S As String, SS
    SS = 0 '"1899-12-31"
    S = CStr(d)
    StrDT2Long = DateDiff(n, SS, S)
End Function

这样可以正确处理 1900-3-1 至今的日期,但是无法正确处理 1900-3-1 之前的日期,结果多了1 。

因此,在 Excel 中处理 1900-3-1 之前的日期都要注意核对结果,

因为excel中存在 1900-01-00 和 1900-02-29 两个无效的日期。

因此处理现在的日期时,以上函数 SS 的值选择设为 0 即可,不要用1900-1-1、1899-12-31或1899-12-30。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/550291.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数图智慧零售解决方案,赋能零售行业空间资源价值最大化

数图智慧零售解决方案 赋能零售行业空间资源价值最大 在激烈的市场竞争中,如何更好地提升空间资源价值,提高销售额,成为行业关注的焦点。近日,NIQ发布的《2024年中国饮料行业趋势与展望》称,“在传统零售业态店内&…

第十一章数据仓库和商务智能10分

【数据仓库-后端,商务智能-前端】 基本算法:关联关系(牵手-谈恋爱),集群关系(杭州人爱吃酸甜口),决策树,线性回归,贝叶斯,神经网络,时…

Adobe AE(After Effects)2015下载地址及安装教程

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件,由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能,可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…

使用大模型来实现医疗领域的隐私信息保护

大模型隐私主要分为训练阶段、推理阶段以及用户与大模型交互过程中的隐私泄露,目前的研究重点在大模型训练阶段。传统隐私保护技术主要包括联邦学习、差分隐私、同态加密等,这些技术在大模型背景下的应用挑战不断加剧:(1)联邦学习应用于大模型…

ArkTs

一、概述 ArkTs是由TypeScript扩展而来,在继承TypeScript语法的基础上进行了一系列优化,使开发者能够以更简洁、更自然的方式开发应用。 TypeScript语法: 线上网站:https://www.typescriptlang.org/zh/play 二、TS变量 变量声明: 常量声明: const b…

【高端电流检测IC储能产品应用方案】耐压45V侧轨的电流检测芯片FP137 应用于电脑电源,开关电源以及多口快充充电器,户外移动电源,适配器,电池充电器等

近年来,随着电子产品的飞速发展,对电流检测精度和可靠性的要求也越来越高。特别是在电脑电源、开关电源以及多口快充充电器、户外移动电源、适配器、电池充电器等领域,对电流检测技术的需求更是日益增长。 电流检测芯片是一种关键的电子元器…

强化学习(三)基于动态规划 Dynamic Programming 的求解方法

文章目录 1. 动态规划与强化学习的联系2. 利用动态规划求解最优价值函数2.1 案例背景2.2 策略评估(预测)2.3 策略迭代(控制) 在前文《强化学习的数学框架:马尔科夫决策过程 MDP》中,我们用马尔可夫过程抽象…

STM32 软件I2C方式读取MT6701磁编码器获取角度例程

STM32 软件I2C方式读取MT6701磁编码器获取角度例程 📍相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》🌿《Arduino通过I2C驱动MT6701磁编码器并读取角度数据》🔰MT6701芯片和AS5600从软件读取对比,只是读取的寄存器和…

Adobe AE(After Effects)2024下载地址及安装教程

Adobe After Effects是一款专业级别的视觉效果和动态图形处理软件,由Adobe Systems开发。它被广泛用于电影、电视节目、广告和其他多媒体项目的制作。 After Effects提供了强大的合成和特效功能,可以让用户创建出令人惊艳的动态图形和视觉效果。用户可以…

【OpenGL实验】在python、Qt5、pyOpenGL程序的若干要点

实验效果图: 代码 目录 一、说明二、关于QGLWidget2.1 三个方便的虚函数2.2 析构函数2.3 QGLWidget析构函数 三、关于QGLWidget的三个虚函数分工3.1 initializeGL:数据准备、数据绑定分离3.2 resizeGL:视角改变函数3.3 paintGL:…

苍穹外卖分类管理

分析 需求分析 SQL的写法 1 在mapper中写 2 在xml中写 Mapper public interface CategoryMapper {/*** 插入数据* param category*/AutoFill(OperationType.INSERT)Insert("insert into category(type, name, sort, status, create_time, update_time, create_user, upd…

docker安装并跑通QQ机器人实践(2)-签名服务器bs-qsign搭建

在前文中,我们详尽阐述了QQ机器人的搭建过程及其最终实现的各项功能展示。接下来,我们将转向探讨该项目基于Docker构建服务的具体实践。本篇将以QQ机器人签名服务——qsign为起点,逐步展开论述。 1 获取和运行 xzhouqd/qsign:8.9.63 镜像 1.…

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从) 一、准备工作二、搭建nfs服务器2.1 安装 NFS 服务器软件包(所有节点执行)2.2 设置共享目录2.3 启动 NFS 服务器2.4 设置防火墙规则(可选&am…

【ROS2】搭建ROS2-Humble + Vscode开发流程

【ROS2】搭建ROS2-Humble Vscode开发流程 文章目录 【ROS2】搭建ROS2-Humble Vscode开发流程1.基本环境配置2.搭建Vscode开发环境 1.基本环境配置 基本的环境配置包括以下步骤: 安装ROS2-Humble,可以参考这里安装一些基本的工具,可以参考…

Webrtc 信令服务器实现

webrtc建联流程图 由上图可知,所谓的信令服务器其实就是将peer的offer/candidate/answer传给对端而已。这样的话实现方式就有很多种了,目前普遍的方式HTTP/HTTPS,WS/WSS。像webrtc-demo-peerconnection就是实现HTTP这种方式。本文使用WS&…

APIGateway的认证

APIGateway的支持的认证如下: 我们从表格中可以看到,HTTP API 不支持资源策略的功能,另外是通过JWT的方式集成Cognito的。 对于REST API则是没有显示说明支持JWT认证,这个我们可以通过Lambda 自定义的方式来实现。 所以按照这个…

LangChain-Chatchat 开源知识库来了

LangChain-Chatchat 开源知识库来了 LangChain-Chatchat 架构设计LangChain-ChatChat 具体实现过程 一键本地离线部署软件环境硬件环境支持三种部署方式 LangChain-Chatchat 是基于 ChatGLM 等大语言模型与 LangChain 等应用框架实现,开源、可离线部署的 RAG 检索增…

Django数据导出与导入问题

执行: python manage.py loaddata data.json 的常见错误: * 1. UnicodeDecodeError: utf-8 codec cant decode byte 0xff in position 0: invalid start byte* 2. raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)",...django.core.serializer…

vue的就地更新与v-for的key属性

vue的就地更新 Vue中的就地更新到底是怎么回事,为什么会存在就地更新的现象? 注意下面的例子,使用v-for指令时,没有绑定key值,才有就地更新的现象,因为Vue默认按照就地更新的策略来更新v-for渲染的元素列表…

windows Webrtc +VS2019 (M124)下载编译以及调通测试demo

下载depot tools 设置梯子 git config --global http.proxy 127.0.0.1:10000 git config --global https.proxy 127.0.0.1:10000 下载 $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 设置depot_tools目录为环境变量 下载webrtc # 设置系统代…