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

本文探讨了在Java和JavaScript中使用NewDate()获取当前时间时遇到的问题,并提出了统一采用服务器端时间作为解决方案,以防用户通过修改客户端时间进行作弊。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正确使用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()的场景,正确的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值