在进行机房收费系统合作开发的过程中,负责编写U层的H提出了一个问题,我们在进行数据库记录插入的时候,那个日期和时间字段的值是从从客户端程序获取还是从DBMS的服务器上获取?说实话,在做牛腩新闻发布系统之前,我是没想过从数据库系统里获取当前时间的,这又让我增长了见识。后来在交流的过程中,有了解到还可以获取网络时间,那么今天就来先对这三种获取当前日期时间的方法进行一下总结。
首先是从客户端程序获取当前时间,这个不难,相信大家都做过这件事情,当然不同的编程语言之间或许会有差异,但总的来说都是一样的,通常都是调用系统函数来获取的。下面我就以C#语言为例,举个例子:
其次是从DBMS获取当前时间,这个更简单,我们以SQL
Server 2008为例进行简单举例:
上面获取的是日期和时间在一起哦datetime类型,如果你只想使用日期或者时间,就要使用convert函数了。举例如下:
当然格式转换的形式还有很多,详细的可以参考下面的博客:
http://blog.csdn.net/jimlong/article/details/7346970
最后我们来说如何从网络上获取当前日期时间,这个笔者并不会写获取网络时间的函数,因此在网上到处找啊,好不容易找到一个C#版的,最终因为URL链接无法访问,没能实现获取网络时间的夙愿。后来在搜索结果中看到龙哥的博客《多方法获取网络时间》(博客地址为:http://blog.csdn.net/xiaoxian8023/article/details/7250385),顿时觉得救星来了,于是仔细阅读了博客,并接着调试找来的代码,发现还是不行。后来索性挨着试吧,没想到第一种方法就成功了。大家对C#代码获取网络时间感兴趣的可以到龙哥的博客里去看,博客里的第三种方法我没有运行出来,有兴趣的可以自己试试。
接着我把自己的电脑的时间也一并获取了,如下图所示:
大家可以发现笔者的电脑时间显然是比网络时间慢了近3分钟,因此我们在做系统的时候,尤其是金融系统,对于向数据库写入时间的时候,应该慎重,不能一味的从客户端获取时间信息,当然数据库服务器也不行,万一服务器的时间也不准呢?也许你会说,获取网络时间存在网络延时的问题。的确有道理,但是网络延时基本都是在毫秒级别的,相比较而言还是比较靠谱的。可是这是在网络通畅的情况下,万一断网了呢,岂不是很麻烦?因此采用一个折中的办法,定期校对本地时间,实时与网络同步。