有时项目中需要使用服务器时间,但总不能每次需要的时候都从服务器中获取。这里获取的原理是一次获取成功后保存到内存,以后每次需要时就从内存中获取并计算出当前服务器时间。
AS3代码:
package qtone.ta.desk.common
{
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.utils.Timer;
import flash.utils.getTimer;
import qtone.ta.desk.dao.DateTimeDao;
import qtone.ta.desk.event.DateTimeEvent;
import qtone.ta.desk.framework.ObjectManager;
/**
* 获取并计算服务器当前服务器时间工具
* */
public class ServerTimeUtil
{
private var dtDao:DateTimeDao;
private static var serverTime:Number = -1; // 记录请求时返回的服务器时间
private static var regTime:Number=-1; // 记录请求时当前flash player运行的时间
private var startTime:int; // 请求开始时间
private var endTime:int;//请求结束时间
public function ServerTimeUtil(){
}
public function load():void{
startTime = getTimer();//记录请求开始时间
//向服务器请求
dtDao = ObjectManager.getInstance("DateTimeDao") as DateTimeDao;
dtDao.addEventListener(DateTimeEvent.GET_TIME_COMPLETE,onComplete);
dtDao.query();
}
//请求完成
private function onComplete(event:DateTimeEvent):void{
dtDao.removeEventListener(DateTimeEvent.GET_TIME_COMPLETE,onComplete);
if(event.data.success){
endTime = getTimer();//记录请求结束时间
regTime = (startTime+endTime)/2; //得出请求时AVM运行时间
serverTime= Number(event.data.nowTime);//请求时服务器时间
}
else{
trace("获取服务器时间失败!");
}
}
/**
* 获取当前服务器时间
* */
public static function getServerTime():Number{
if(serverTime > 0)
{
// 服务器时间计算方式:当前服务器时间 = 当前AVM运行时间 - 请求时AVM运行时间 + 请求时服务器时间
var span:int = getTimer() - regTime;
return serverTime + span;
}
return -1;
}
}
}