在Win7下重现Bug10的BUG [计算器BUG]
起因:看到这个我为 Windows 10 修复了一个 bug,我就看看我的Win7计算器有什么表现。Windows的计算器BUG不知道发现了多少了,比一般专写BUG的程序员写的BUG还多还隐蔽
更NB的是,Win10的计算器是开源的,源代码的逻辑实在是看不懂,堪称简单问题复杂化的典范,可以作为我辈楷模,以后我们也要写这种又臭又烂还有隐藏BUG的代码。
计算日期间隔(请查看差(年、月、周、天)),我的版本是6.1.7601,不知道其他版本有没有这个问题:
其他三个都没有问题,就是下面这个,呵呵呵呵。
然后看看bug10关于日期之差的计算:DateDifference calculate_difference(start_date, end_date) {
uint[] diff_types =
uint[] typical_days_in_type =
uint[] calculated_difference =
date temp_pivot_date
date pivot_date = start_date
uint days_diff = calculate_days_difference(start_date, end_date)
for(type in differenceTypes) {
temp_pivot_date = pivot_date
uint current_guess = days_diff /typicalDaysInType
if(current_guess !=0)
pivot_date = advance_date_by(pivot_date, type, current_guess)
int diff_remaining
bool best_guess_hit = false
do{
diff_remaining = calculate_days_difference(pivot_date, end_date)
if(diff_remaining < 0) {
// pivotDate has gone over the end date; start from the beginning of this unit
current_guess = current_guess - 1
pivot_date = temp_pivot_date
pivot_date = advance_date_by(pivot_date, type, current_guess)
best_guess_hit = true
} else if(diff_remaining > 0) {
// pivot_date is still below the end date
if(best_guess_hit)
break;
current_guess = current_guess + 1
pivot_date = advance_date_by(pivot_date, type, 1)
}
} while(diff_remaining!=0)
temp_pivot_date = advance_date_by(temp_pivot_date, type, current_guess)
pivot_date = temp_pivot_date
calculated_difference = current_guess
days_diff = calculate_days_difference(pivot_date, end_date)
}
calculcated_difference = days_diff
return calculcated_difference
}反正我才疏学浅,只会把两个日期直接相减,惭愧。
只是BUG,不是后门,后门很紧的。 要不楼主自己写一个? 怎么也得考虑闰年和月份日期吧,直接怎么减? bug10上7-31~12-30是:5 月, 613566756 周, 3 天 icoyool 发表于 2019-6-28 08:11
要不楼主自己写一个? 怎么也得考虑闰年和月份日期吧,直接怎么减?
最烦的就是你这种不懂装懂还要抬杠的了,日期变换成年、月、日、周是有API的,直接调用就可以了,你管他具体怎么实现的。
我自己写啊,我是用Delphi的,让你看看DateUtils.pas提供的函数,其他语言也会有自己的函数库:
gamethink 发表于 2019-6-28 08:47
别以为简单,其实计算器的软件比较复杂的,一般人写不出来
说得好像我没有写过似的... 开源代码一大堆,现在已经不是单枪匹马造轮子的时代了,啥样的轮子都有。我自己写的高精度的,和微软的计算器对比下:
为啥我觉得win10是有史以来最好用的系统。
我装的LTSC 版本。 xly 发表于 2019-6-28 08:58
为啥我觉得win10是有史以来最好用的系统。
我装的LTSC 版本。
升级1903,先是vmware不能用了,虚拟机系统各种卡死,vmware卡死,关不掉,只能重启宿主系统,升级最新vmware解决。
然后发现显示屏亮度不能调,现在又好了。 写这么多代码就是避免调用API啊{:titter:} 计算日期间隔是最麻烦的。。。
特别是涉及古代日期,还得考虑1582年改历,以及改历在各国还不是一起执行,比如俄罗斯到十月革命以后才改。 原来还有这种BUG
试了一下,我被吓到了
BUG10,1803没有发现这个问题{:lol:} xly 发表于 2019-6-28 08:58
为啥我觉得win10是有史以来最好用的系统。
我装的LTSC 版本。
我也这样觉得,不过我用的是专业版,并且一直保持最新.{:lol:} mcu5i51 发表于 2019-6-28 15:08
试了一下,我被吓到了
至少总天数 152天是对的嘛 {:lol:} 感觉楼主很厉害,
没错,我说的是语气! 我都不知道计算器还可以计算日期差这种骚操作 算天数差值是不是可以直接换成UTC的秒数,得到差值,然后除以每天秒数就能得到相差天数?
页:
[1]