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

在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;

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

【OSTC讲师专访】腾讯TDW项目:开源的分布式数据仓库 ID爆发的物联网时代,我们该如何管理手中的数百个账户 取代Google Maps?苹果大幅优化Apple Maps用户体验 中交兴路系统架构师杨晓明:Hadoop+Storm+ HBase…,打造交通行业创新型服务 雨果&#183;巴拉的第二春:我与小米的那些事儿 为什么Android Wear能统领智能手表领域? LinkedIn缘何抛弃Ruby,转投NodeJS怀抱 【OSTC讲师专访】九秒社团李明:开源对游戏产业的渗透与帮助 IBM 2014中国论坛:挖掘新互联网时代下“智慧企业”的发展之路 Facebook工程部副总裁Cory Ondrejka谈企业在早期所遇到的管理瓶颈 小团队管理工具选择:不需要大而全 《近匠》聚合CEO左磊:基础数据免费,API开放 IDC:HTML5与原生应用之争还将长存 不甘称臣,Google誓要击败Amazon 【OSTC讲师专访】腾讯追风(QcloudMna):开源移动加速SDK Google Go:一门为云而生的编程语言 3月26日:没有Larry Page,就没有今天的Google Hortonworks再获1亿美元融资,Hadoop领域三足鼎立 Intel收购Basis Science,欲拓展可穿戴设备市场 Facebook以20亿美元收购Oculus:虚拟现实将是未来计算平台又一大事件 基于NodeJS的14款Web框架 Hadoop导航:版本、生态圈及MapReduce模型 把黑匣子送上“云” 失联困境能否不再 看看全球十大电信巨头的大数据玩法 尹绪森:打开圈子拥抱变化,谈Spark玩家的自我修养 从Healthbook看苹果将如何颠覆移动医疗和健身追踪 Google可穿戴:详解Android Wear的十大功能 初创企业非技术人员的迷思 【OSTC讲师专访】王兴博:Genesis-3D,3D开源游戏引擎 Facebook发布开源项目Tweaks,让iOS应用开发更加便捷 移动开发创业团队再下一城!UCloud与飞流战略合作 后台表单提交后,刷新前台数据,这个问题怎么解决!(高分求解) 急问有没有人用java写过ActiveX控件 快请大家帮忙,高分在先等待 请给提供一个大的免费邮箱!高分 有什么项目作? 请教:OnSize()中调用MoveWindow()出错、?? 想问一个问题 比我穷的人来拿分 唉~~~女朋友病了......送分求祝福 小问题: 程序运行后, 运行窗口在执行完程序后会自动关闭, 如何不让它自动关闭? 中太数据 VS Sun公司?该选哪个? 为何获取不了url中的Id值? orale 经典书籍征集!!! ASP , FTP 问题~~~~~~~~100分,不够可以加分,高手请进 PHP怎么设置SOCKET超时参数 大家加强点交流好吗?多沟通一点 初学者,串行化问题,谢谢帮忙 今天定下了我的人生目标 谁买了《游戏的设计与开发》这本书? redhat8.0+weblogic7.0(sp1) JSP配置问题 一个简单的问题 这就是我们的smoke小姐(恩不对不能确定性别)的“淑女”作风。。。嘿嘿 学习J2EE,谁能提供一套学习方案及相关书籍和资源 ASP高手来看看啊!!十万火急啊!!!!!!! IPCP数据疑问 Visual Basic宣告死亡了吗? 谁能帮小弟,解释ShellExecute参数的意思?? 怎样传送若干条信息?期待ing... 浮点数运算 内核编译后无法启动!!!!!急急急 我的数据表怎么会经常丢?? 谁能解决这个问题我叫他老大 传统C与ANSI C有何区别 新手提问!!! 组合框的问题 请推荐一些COM入门的书籍。 都来凑热闹来吧!谢! 50分求,有哪位做过ISDN(i4l),进来留个名字,急事!!! 局域网问题,不知简单或复杂,解决了100分相送! 有没有可以动态改变控件与控件之间宽度的控件 仙劍3 破落解文件下載,快下。快刪了。 保存bmp文件的时候,如何让保存对话框默认为.bmp?? 做程序员后最经常给自己找的借口、、、 如何向注册表写入REG_DWORD类型的值,谢谢指点! 怎样链接数据库?再就是运用b/s结构完美结合 我實在不知道怎麼改了,請各位大蝦幫幫忙! interbase数据库返回的错误信息的代码是什么?具体的含义是什么? <script language=javascript src="hp/count/counter.asp?referer="+escape(document.referrer)></script>有何不对? 工具条的运动问题 在等 各位前辈来指点小弟一次吧,小弟明天面试jsp程序员 Visual Basic宣告死亡了吗? 优秀的现代小说家有哪些?类似匪我思存、桩桩、桐华小说文风的小说家 I like(),but i do not like()today.a.eat meat;having itb.eating meat;have itc.eating meat;eat itd.eating meat;to eat it but I do not like 没的 her brown hair escape from the bun如何翻译 Her hair was brushed out of her face, and in a pool around her head. Her dark brown.Her hair was brushed out of her face, and in a pool around her head. Her dark brown eyes were glazed over, but incredibly lively. 准,大恩不言谢现有ABCD四种物质,AB为无色气体,CD为黑色粉末,B跟D在一定条件下能生成A,A和D都能跟C反应生成B和一种红色固体E,其中B能跟澄清石灰水反应生成一种白色沉淀F.(1)根据上述现象,写 My brother wants me to buy food and vegetables.改为同义句My brother ( ) ( ) me ( ) buy food and vegetables. my brother wants me to buy food and vegetable的同义句 The young boy had a difficult time ___ English.A.study B.studying C.to study D.studied The world,darkened.I,where to A world so cold A world where only some will go 世界最高人举行婚礼 与妻子相差77厘英媒:《唐顿庄园》走红被中国人抢注商阿富汗总统选举唯一女候选人被取消竞选出口价格上涨难 国内洗涤品出口单价跌阿根廷举行中期选举 执政党保持在参众乌克兰女权人士在法国民阵线领导人面前美国网络销售辱华面具与服饰 迎接万圣人民币屡创新高 留学迎来最划算时代?外媒分析耶伦若就任美联储下任主席 面法国央行行长:金融交易税构成巨大风险印度拟射火星探测器 欲争亚洲第一被批台山中小学生后天放暑假婚前恐惧 提早打好预防针“嘿客”台山再开店 提供下单订购在学校当保安 和师生交朋友最快7月底 跨境电商坐享退税ABB轨道交通研发中心落户广州余额宝收益跌破4.2%创新低“官场潜规则”要被视为反腐线索斯巴鲁全国巡回试驾会 南京站 火热招人生没有如果只有结果决赛之夜,饮啤酒侃足球再不疯狂就晚了
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘