正确使用New Date()返回的机器时间

来源:互联网 发布:php 偏移量计算 编辑:程序博客网 时间:2024/05/22 17:40
正确使用New Date()返回的机器时间


1、现象:问题描述
        在用JAVA开发考试培训系统中,我在后台使用new Date()来获得当前时间放到session里面作为考试开始时间,当用户提交时用JavaScript中的new Date()来获得当前时间作为考试结束时间,当用这两个时间来计算考试所花的时间时,发现结果经常不对,有时竟然是负数。
2、关键过程:根本原因分析
         在后台使用new Date()获得的当前时间是服务端的时间,而用户提交时JavaScript中的new Date()获得的是客户端的时间,如服务器和客户端的时间并不同步的话,得到的结果当然会不正确了。
3、结论:解决方案及效果
        后来在其他地方也曾遇到过类似的问题,通过实际代码测试得到的结论如下 :在哪台机器上运行的代码,取得的机器时间,就是该机器的当前时间(Date类缺省的初始化或构造函数使用的时间是当前机器时间)。因此一般存在四种不同类型的时间,
1) 在SQL语句中使用SysDate
得到的时间是数据库系统所在机器的当前时间。
2).在WEB服务器端JavaBean的JAVA语句中使用(Servlet、一般的java类等也属于这一
范畴)new Date()
得到的时间是WEB服务器所在机器的当前时间。
3).在EJB的JAVA语句中使用new Date()
得到的时间是发布EJB的机器(EJB容器所在机器)的当前时间。
4).在浏览器页面中的javascript脚本语句中使用new Date()(在浏览器端运行的java小应
用程序applet等也属于这一范畴)
得到的时间是浏览器所在机器(客户端)的当前时间。
因此本案例中的问题只需要将获取的时间统一取服务端或者客户端时间就可以解决,建
议统一取服务器端时间,防止用户通过修改客户端时间作弊。
4、经验总结:预防措施和规范建议
区分不同的New Date()的场景,正确的使用。

原创粉丝点击