您的位置:首页 > 其它

一个时间转换的问题,顺便谈谈搜索技巧

2006-02-22 15:53 447 查看
前几日一个朋友问我一个时间转换的问题。
http://community.csdn.net/Expert/topic/4526/4526261.xml?temp=.2506525
他的.Net程序从一个服务器读到一个表示时间的浮点数(变态的服务器),它需要将这个浮点数转换成为.Net中的DateTime类型。
比如,38733.58621528 = 2006-1-16 14:04:09

具备一点编程常识就知道,整数部分表示日期,小数部分表示时间。问题的关键是0.0表示的时间是什么?也就是说系统从什么时间开始计时。
在Windows的大多数程序中是从1900-1-1开始计时的。而Linux是从1970-1-1开始计时的。.Net中的时间表示范围是从0001-1-1到9999年。经过核实,数据是从SQL Server2000中获取的,所以时间是从1900-1-1开始计时的。

在CSDN中的回帖中已经给出了具体的换算方法。但是我并不打算才用。根据我的经验这应该是一个常用功能,所以.Net中一定有现成的函数。我是.Net坚定的拥趸。果然,最终我在.Net的类库我找到了答案。我是如何找到答案的呢?我把我寻找答案的过程列在这里:

第一次尝试,
我打开VS2005,打开一个空白工程,键入System.DataTime然后打“点”,在自动完成功能列出的方法参数列表中查找。浏览了一遍,没有找到“看起来很像”的方法。
这是我习惯采用的一种方法。因为一般遇到问题的时候都是在开发的过程中,VS2005已经打开,随便找一个地方,开始键入[可能的名称空间].[可能的类名],然后打“点”,在弹出来的列表中查找,找到名称可疑的,就进一步看它的参数列表和返回值,以及介绍。在进一步就是查看SDK中的文档。这种方法的特点是可能很快就找到合适的方法,也可能很长时间也找不到,主要看你的思路和.Net的思路是否一致。编程时间越长,经验越丰富,你的思路和.Net的思路就越一致,命中率就越高。这方法还一个好处就是你会发现很多新奇的函数,虽然解决不了现在的问题,但是可能对今后遇到的问题有帮助,是一种积累。

第二次尝试,
既然取巧的方法没有找到答案,那我另找办法。经常使用Excel的朋友都会知道,有时在Excel中输入一个日期,但有时后显示成为一个浮点数。解决方法是,选中该单元格,点击菜单“格式”-“单元格格式”,在“数字”选项卡上将“分类”设置为“日期”。这表明Windows系统一定有一方法可以直接转换。Office12和VBA有着非常密切的关系,我先在VBA中试验一下。在VB和VBA中都有一个日期转换的函数CDATE()
试验一下
time = CDate(38733.58621528)
Str1 = Format(time, "YYYY-MM-DD HH:mm:ss")

Str1的结果是2006-01-16 14:04:09。Ok。完全正确。

好,现在的问题是,如何在.Net中找到和CDate对应的函数。

有我经常在SDK中浏览.Net的类库,(有点BT,但确实有用),所以我知道有一个名称空间是Microsoft.VisualBasic。(这也是我为什么会想到首先在VB中做实验的原因)在这个名称空间下,有很多模拟VB中函数的方法。让我找一找其中有没有CDate?

打开SDK,找到Microsoft.VisualBasic名称空间,看看里面有哪些类。找到一个DateAndTime Class。里面是Day,Month,Year这些函数,不是我们要找的。再找,找到Conversion Class,这个有门儿,(什么?你问Conversion 是什么意思?就是转换的意思。作为程序员英语阅读可是基础,否则你有了问题就只能等待别人帮你解答了),看一下里面的方法,只有Fix Method, Hex Method, Str Method,Faint!没有Date Method。怎么办? 这时候就要耐心的读文档了。看一下 Conversion Class的Overview。 Syntax,Remark,Example,Inheritance Hierarchy, Thread Safty, Platforms,都没有。别着急,看一下See Also。

好,有一个Conversion Summary的链接。打开看一下。太好了,在这里终于找到了CDate。点击,进入。什么?不是CDate的专题介绍,又是一篇长长文档。一定要耐心,答案已经很接近了,就当是练练英语好了。什么?你说老板催得紧,明天再练英语。没办法,好吧。按下“Ctrl+F”,搜索“CDate”。找啊找啊,终于找到了

Date/Time Conversions. Use the IsDate Function (Visual Basic) to determine if a value can be converted to a date and time. CDate recognizes date literals and time literals but not numeric values. To convert a Visual Basic 6.0 Date value to a Visual Basic 2005 Date value, you can use the System.DateTime.FromOADate(System.Double) method.

一定要耐心,英语就是这样炼成的。找到了吗?System.DateTime.FromOADate(System.Double),就是这个方法。

OK,然我们回顾一下找到答案的全过程。

步骤采用方法结果点评
1在VS2005中,使用打“点”法,狂搜失败没什么技术含量,和经验和运气有关。
2在Excel中试验证实确实有简便方法多使用一些软件,建立对软件的感觉。
3在VBA中试验CDATE证实CDate函数起作用身为程序员,即使进入.Net时代,也应该多掌握几门语言。
连老鼠都知道多掌握几门外语的重要性。注1
4在SDK中查找Microsoft.VisualBasic
中的CDate函数。
找啊找啊任何工作都要注重平时的积累。
5查找Coversion Class在Overview中没有找到,但是找到了
Conversion Summary的链接
不要放弃,高手也许就是多了一点耐心。
英语阅读也很重要。
6仔细阅读Conversion Summary终于找到了
System.DateTime.FromOADate(System.Double)
耐心,还是耐心。你能否解决一个问题取决于你解决这个问题的决心。
OK,我的问题说完了,各位朋友有什么要说的。在CSDN的帖子里有各种问题的答案。但是却没有说明是如何找到答案的。我们都知道“授人以鱼,不如授人以渔”的道理。希望以后能够多看到“授人以渔”的文章。

注1,这是一个笑话,一天,老鼠妈妈带着小老鼠外出。忽然遇见一只猫,马上逃跑。眼看就要被猫捉住了,突然老鼠妈妈学了几声狗叫,“汪汪汪”。猫愣了一下,扭头跑掉了。老鼠妈妈教育小老鼠说:“看,这年头多掌握几门外语是多么重要呀。”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐