说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在Delphi中避免2000年问题的捷径

HTML文档下载 WORD文档下载 PDF文档下载
在Delphi中避免2000年问题的捷径

---- 众所周知

对于应用软件而言千年虫主要是指2000年跨越问题。也就是当我们采用两位数的省略形式表示年份

在进入2000年时

由于可能将00年理解成1900年,从而引起的日期表达、运算、输出等方面的严重差错,其实大多数操作系统及应用系统在内部格式上都有充分的日期表示范围的

通常都能表示1900-9999年的日期

就连DOS的文件日期中采用可怜的7位二进制数

也能表示1980-2099。所以真正引起众多问题的原因是在于人们习惯于使用两位数年份格式来进行输入、显示甚至运算、比较等

从而引起了世纪跨越时的种种问题。

---- 由于多数语言及数据库系统都支持完整年份的日期表示法。所以解决办法之一是系统中避免使用缩写年份表示法(即2位数年份)。但是对于已经使用的系统来说, 许多系统可能对日期的宽度格式做了既定的统一的规划, 大批量地修改扩充位数显然是一项极为耗时耗力的工作,而且往往顾此失彼,很难不出差错, 所以这并不是一个最佳解决办法。再说在日常生活中人们总是习惯于避繁就简,使用简略的纪年称呼。我相信到了明年后年,人们一定又很习惯地称呼本年为00年、01年。

---- 基于上述两点理由, 我们又不可否认采用两位数年份格式的实际意义。所以保留2位数年份表示法,并寻求避免千年虫的方法, 将有更大的意义。 我们知道,两位数的年份(00-99),只能表示一百年的日期,超过范围则必定引起二义性。通常系统将它约定为1900-1999年,这样自然就无法表示2000年了。如果我们将00-99约定为1930-2029年,也就是对映射的时间窗作一定的移动, 那么对于多数应用都能完全满足纪年的需要,而且不需要改动数据储存和输入输出的格式。

---- 为了实现这一时间窗的移动, 多数系统必须人工干预, 也就是必须在输入或转换2位数年份时强制映射到约定的时间窗中。

---- 那么,有没有更为简捷的解决办法呢?

---- 打开windows98的控制面板中区域设置, 在日期选项卡中有几个参数和2000年跨越有密切相关,一是短日期格式,可以是yy-M-d或yyyy-MM-dd等,它决定系统日期的显示格式。一是两位数年份的变换时间窗,我们可以设为1930-2029.

---- 经过这样设定后回到Delphi中观察,我们发现日期显示是变为4位年份格式。但是当您试着在日期栏中输入'00-1-1'会发现,系统依然变换为1900年1月1日. 问题仍未解决。

---- 经过不断研究,我们找到了答案。原来在Delphi中同样有个时间窗定义变量TwoDigitYearCenturyWindow。比如将它设为60,它的含义就是将今年的年份前溯60年作为时间窗起点,也就是变换时间窗为1939-2038。这样一来问题就彻底解决了。

---- 值得一提的还有另外一个变量ShortDateFormat

作为新开发的系统,最好设为'yyyy-MM-dd'

这样系统就不依赖于windows系统设置的格式,而且统一为整齐的10位宽度,这时既可输入4位数年份又可方便输入两位数年份, 让系统根据时间窗来自动转换。当然对于某些特殊应用中年份可能出现超出时间窗范围的日期,那就一定得完整输入了,就算不小心输成2位数形式,也能立即从系统转换出来的4位年份中看出错误,而得到及时纠正!

---- 综上所述

在已开发的老系统中

可在程序开始处加入以下几行

再用Delphi4.0重新编译,即可消除通常的2000年问题!

DateSeparator := '-';

ShortDateFormat:='yy-mm-dd';

TwoDigitYearCenturyWindow:=80;

---- 对于新开发的系统,最好在程序开始处加入:

DateSeparator := '-';

ShortDateFormat:='yyyy-mm-dd';

TwoDigitYearCenturyWindow:=70;

---- 如此简单的几句, 一定会为您换来无穷的效益!

微信评论功能开启将成净土还是地狱 如何定位Android NDK开发中遇到的错误 流行从这里开始,MDCC 2014十大人气产品榜单揭晓! 专访POWER 8编程挑战赛选手唐刚:大数据计算永远是主角 微信公众号认证命名松绑,您怎么看? LambdaNet:纯Haskell实现的人工神经网络库 专注模式识别,易道博识为海量信息输入提供便捷之门 【问底】Michael G. Noll:整合Kafka到Spark Streaming——代码示例和挑战 2014年手游和社交游戏行业重要趋势解读 腾讯副总裁罗道锋:共建全国最大安全云库 5分钟内数据精准共享 Connected Cycle 一举两得的智能自行车踏板 CES可穿戴产品前瞻:汽车厂商入局智能手表领域 果断Mark!国外程序员收集整理的PHP资源大全 Google 2015项目前瞻:智能隐形眼镜、Google X、Ara Swift的坑:如何实现enum的多选? Swift,其实没那么任性 如何利用单台服务器实现10万多个Git仓库托管 Swift的初始化方法 TIOBE 2015年1月编程语言排行榜:JavaScript成大赢家 为什么iOS开发不需要Storyboard? 仅有纽扣大小的开发板 Intel Curie “撒娇”的豌豆荚?被百度手机助手屏蔽太糟心! 【工具推荐】Pgcli—自动完成和语法高亮的Postgres命令行工具 CES 2015:挑一款机器人带回家? 夜行、睡眠与健康:CES 2015十款酷炫的可穿戴产品 Java 9中新的货币API 唯“简”不破,Apple Watch App的设计之道 Google Glass从X labs“毕业”,更换项目负责人 不进化,则消亡——互联网时代企业管理的十项实践 RedMonk 2015年1月编程语言排行榜:进击的Swift! 微信开放JS SDK,这场web巨变意味着什么? 如何得到光驱盘符? Oracle8i的Schema Management建立表不支持中文么? 问各位:怎样测试WEBLOGIC6。0下面的数据库连接是否连通? 数据库存在怎么找不到? 请问应用程序服务器一定要在NT操作系统下编写吗? 我不高兴,一个贴子只能回复三次,没道理啊!有时三次回答是解决不了问题的。。。我不高兴。。。 谁能告诉我比较优秀的国外的远程教育站点? 请问大家谁有用CGI编写的类似于购物车的程序源代码? mail函数的使用 请教,如何在text的onkeypress中控制输入的字符为数字 为什么resultset.last()说是抽象方法错? 问问高手关于CFrameWnd的创建 男人单身不是罪 谁能介绍几本国外专家编写SQL Server的进阶教程(最好有电子版) 我也不得不说了,为了我的朋友,为了随风,也为了我自己。。。。。。。。。。。。(贴子长,上班的时候还是别看了好:) 请推荐几本用vc开发服务程序的书籍 请问如何在TC30中使用并连接第三方LIB??? 曾经有一个中毒的人…… to: nononono(null,null),再来! 导入的数据,字符型输出为乱码在oracle8.05中,如何解决?谢谢! 做设计文档时,是先进行详细设计还是数据库设计? csdn我爱你........ oracle8.05中如何察看记录?谢谢! 哪位兄弟见过可以收发邮件(SMTP)的源码,做成动态连接库的那种。别的程序可以调用 关于tedit控件(很弱智的问题,但是小妹妹我就是不会做) 请问一个简单的条件是用Ttable的filter还是Tquery? 选DCOM还是CORBA? 倒库出现的问题 寻求怎样写SQL语句的教程 JNI的问题: dll文件放在哪里能被servlet调用到? 好不容易收到第一份海外定单! 问ListCtrl的item上的右键菜单 怎样求出一个点的坐标??????急急!!!! 请大家看一看这个分页程序,为什么在页数大于20时,按下一页时下面的页数还是显示的1~10页!!谢谢!! 我的linux在放mp3時總愛死,為甚麼? 唉,弄了好几天了,如何解决?????????????? 请问哪里有免费的PHP+MYSQL主页空间呀! 大家快来帮忙:数据库的一个小问题 我现在想学一门新技术,不知道是学VC++,JAVA,还是刚刚出来的。NET技术呢?请高手指点呀。 高分征解:一个动态提示窗口的问题,给出答案必定给分!!!求救我啊!! 在这里赚分真不容易呀! 怎样检查FORM中CHECKBOX和RADIO的值呢 那里有在asp中操作word对象的详细教程? 请问:如何得到TForm的窗口句柄? authorware中的按钮。 哪里有发送mail成功的php程序!! 关于上传数据的一个特殊问题,有点难 怎么用OLE实现与手机的通讯?? 汉语分词算法 grid显示问题 成为Delphi高手须看哪方面的书籍,请高高手指教? 硫脲在药品中的用途在药品中做哪类添加剂?保护剂?抗氧化? 硫酸和硫脲反应吗 物质的树状分类图. 谁能告诉一些有关硫脲的性质,以及和它性质相似的物质,在2,4-二硝基苯肼法测Vc含量时,硫脲有没有替代品? 柠檬酸钠和硫脲反应吗? 物质的分类,(树状图) 苯硫脲是什么物质 为什么不能把硝酸铋固体直接溶于水中来制其溶液,硝酸铋与水有什么反应? 请选择你熟悉的化学物质,制作一张交叉分类图 成份鉴别怎样证明生石灰中是否含有石灰石?写出有关的化学方程式. 硝酸铋能不能与EDTA反应 请选择你所熟悉的化学物质,制作一张交叉分类图 如何鉴别金属成分?有一块矿石,银白色,可以导电,不溶于冷硝酸或者说我没观察到他溶解,硝酸是68%的.求鉴别方法 硝酸铋为什么能溶解于稀硝酸 请教反应方程式 A、B、C是三种不同类别的含有氧元素的化合物,物质间相互反应的关系如图所示(图中“─”表示相连的两种物 去哪鉴定金属的成分要化学实验室,苏州的~金银锡什么的~ 硝酸铋水解的化学方程试是什么? A、B、C、D、E分别为五种不同类别的化合物,它们之间的反应关系如右图所示箭头表示物质之间能够相互转化,横杠表示两端物质能够发生反映.已知A、B、C、D四种物质中都含有同一种元素:C是 如何鉴定食物中的营养成分? 亚锡酸钠与硝酸铋反应现象及方程式? A为金属单质,B,C,D为三种不同类型的化合物,物质间相互反应的关系(A—B—D—C—A)① D的A为金属单质,B,C,D为三种不同类型的化合物,物质间相互反应的关系(A—B—D—C—A)① D的化学式是— 英语中成分的辨别 什么物质可以通过一定反应直接形成盐? A、B、C三种化合物通过分解反应分别产生了两种物质(反应条件和各物质化学式前的系数均已略去):A——M+N B——M+Q C——M+PN为一种盐,其水溶液可跟AgNO3溶液反应生成一种不溶于硝酸的白 尿素与亚硝酸钠反应写出反应方程式,要求配平.就这么简单,急需务必1小时内搞好. 盐发生反应的条件①盐和盐 ②盐和酸 ③盐和碱是不是①③要求反应物都溶于水 ②不要求盐溶于水? 按图1-3中箭头所表示的物质间发生的转化,写出相应反应的化学方程式,并指出有元素化合价发生改变的反应. 尿素与水反应的生成物的名称, 盐是一类常见的物质,什么物质通过一定反应可直接形成盐? 该图中各种化学反应方程式和反应类型 尿素能否与双缩脲试剂反应请各位高手回答祥细些. 工业上常用什么反应制取食盐? 完成图中所示的化学方程式,并注明反应的基本类型及反应条件 尿素和硫酸能反应么?是尿素与硫酸的反应,不是硫酸镁,能反应么? 酸的化学分子式是什么?碱的化学分子式是什么?酸和碱结合生成什么反应?盐和醋结合生成什么反应? .如何做交叉分类图现有氧化钠.二氧化硫.甲烷.氯化钡四种物质,请按其所属做一张交叉分类图 硝酸锌硝酸银硝酸铜的混合溶液与一定量的铁充分反应得到的滤渣与滤液分别是什么 尿素会与什么发生反应?尿素的化学性质和物理性质是什么? 哪几种常见物质结合会产生非常剧烈的反应 在 硝酸银 硝酸铜 硝酸锌 混合溶液中,加入一定量的铁粉,充分反映后过滤,在滤渣中加入硝酸银,有气体产生.则下列正确的是A:滤液一定有硝酸铁B:滤渣只含银和铜,一定无锌C:滤渣只含银和 氢氧化钠可以和尿素反应吗为什么 盐和硫酸会产生什么反应难道盐和硫酸混不到一起?像鸡尾酒一样 硝酸银与硝酸铜中加入锌粉,反应后得到滤渣和滤液,向滤液中加稀盐酸,产生白色沉淀的方程式滤渣中有什么物质 请教氢氧化钠和尿素在什么条件下可以产生反应?书上说氢氧化钠和尿素加热就能反应,可是已经煮了好久了(氢氧化钠和尿素浓度为10%),也没有发生反应.请问还需要什么助剂或催化剂才能使 硫酸和什么反应 生成盐和水 在硝酸铜和硝酸银的混合液中加入一定量的铁粉充分反应后过滤再加入稀盐酸有气泡产生,滤液和滤渣中含有什么 尿素在氢氧化钠条件下水解反应方程式 硫酸加上盐产生什么反应 将一定质量的锌粉放入硝酸铜和硝酸银的混合溶液中,充分反映后过滤,测得滤渣中只含一种金属,该金属是—此时滤液中一定含有——如果在滤渣中加入稀盐酸,发现有气体生成,则滤液中一定 尿素高是怎么回事,怎么治疗 硫酸(H2PO4)跟NaOH反应,所生成的盐可能有:( )A、1种 B、2种 C、3种 D、4种磷酸 在一升水中配1mol的硫脲溶液与1mol的铁氰化钾溶液各需要多少克硫脲与铁氰化钾? 在上海松江,哪里可以买到硫代硫酸钠、硫酸氢钠、尿素、硫脲、耐腐蚀的不锈钢容器做一项试验,以上药品仅需最小包装量,希望各位朋友能提供相关信息,在下感激不尽 什么物质能跟硫酸发生反应生成蓝色溶液 硫脲的制备? 硫脲类作用机理是抑制哪种酶的活性原因及机理 怎样判断两种物质发生反应后所生成的物质 哪些药物是硫脲类的? 硫脲与铅反应吗 物质分类图如何画?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn