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

2024-04-17 11:12

本文主要是介绍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 LongDim S As String, SSSS = "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 LongDim S As String, SSSS = 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。

这篇关于excel 无法正确处理 1900-03-01 前的日期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/911641

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql表如何按照日期字段的年月分区

《Mysql表如何按照日期字段的年月分区》:本文主要介绍Mysql表如何按照日期字段的年月分区的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、创键表时直接设置分区二、已有表分区1、分区的前置条件2、分区操作三、验证四、注意总结一、创键表时直接设置分区