最近在做乙個與時間處理相關的開發,需要在進入某個畫面的時候在js中進行倒計時,用以實現特定的功能。在進入到這個畫面之前,需要在該畫面的初始化action中計算出倒計時的時間值interval。
我從資料庫中得到乙個訂單生成時間(使用者端時間,string型別),先轉成date型別。然後再取現在action中的當前時間,然後用date的gettime()方法取的兩個時間差,就得到了這條訂單從生成到現在已經經過的時間time_1,然後再拿「訂單允許操作」的時間time_2減去time_1就得到了倒計時時間interval。接著跳轉到畫面後,以該「倒計時時間interval」作為初始值,用js進行倒計時,以完成特定功能。
功能算是完成了,但是稍微測試一下就發現,上面的倒計時時間計算一直有問題。經過調查找到了發成問題的原因:
訂單的生成時間由db(db部署在pc_a上)產生,用於畫面表示的時候,還要轉化成客戶端的時間(這裡是根據配置檔案裡中的客戶端時區進行轉化),而這個時間也是上面說到的「訂單生成時間(使用者端時間,string型別)」。web系統部署在電腦pc_b上,當前時間的獲取是由web系統中的action完成。由於pc_a與pc_b在時間值和時區上存在差別,同時「訂單生成時間(使用者端時間,string型別)」對應的時區與pc_b也不一致,就導致了上面時間差計算的問題。而我所面臨的問題是pc_a與pc_b電腦的時區一致,但時間值不一致,同時「訂單生成時間(使用者端時間,string型別)」對應的時區與pc_b也不一致。
因此,根據上面的分析,我在計算倒計時時間時就需要考慮到pc_a與pc_b時間值的偏差,以及「訂單生成時間(使用者端時間,string型別)」的時區轉換。由於是開發環境,導致了「pc_a與pc_b」存在時間偏差的發生,這裡設定了乙個引數,為兩台電腦的時間偏差,用於修正倒計時時間。
「訂單生成時間(使用者端時間,string型別)」的時區轉換方法如下:
// 該時間為東8區的時間
string orderreceiptfrontdate = "2013-07-23 12:12:12";
// 配置源時間格式
******dateformat dbformat = new ******dateformat("yyyy-mm-dd hh:mm:ss",new local("zh","cn"));
dbformat.settimezone(timezone.gettimezone("asia/shanghai"));
dbformat.setlenient(false);
// date內建的時區引數與系統有關係,本人當前系統的時區是東9區,
// 因此該date反映的是東9區時間
date orderreceiptdate = null;
trycatche(parseexception e)
// 通過以上方式,就能把orderreceiptfrontdate所表示的東8區時間,自動轉換為
// 東9區的時間物件date orderreceiptdate
時間差計算的方法如下:
// 換算成同一時區下pc_a與pc_b的偏差時間,用於倒計時時間的修正
string deviationtime_str = ... /* 讀取配置檔案中的數值,可以為負數,單位為秒 */
long deviationtime = 0l;
trycatch(numberformatexception e)
// 訂單允許操作時間,從訂單生成的時間開始計算,單位秒
string invalidtime_str = ... /* 讀取配置檔案中的數值,正整數,單位為秒 */
long invalidtime = 0l;
trycatch(numberformatexception e)
/*按照上面的轉化方式,將
string orderreceiptfrontdate = "2013-07-23 12:12:12"; // 東八區時間
轉化換為當前系統所在時區的時間,得到東9區的時間物件 date orderreceiptdate
*/// 獲取系統當前時間
date now = new date();
// 計算倒計時時間
long lasttime = invalidtime - (now.gettime()/1000l - orderreceiptfrontdate.gettime()/1000l)
+ deviationtime;
把上面計算得到的lasttime傳到畫面,就可以執行有特定需要的倒計時功能了。 Java 開發中遇到的亂碼問題
unicode的空間分配 以下unicode區位碼均以16進製表示 unicode的前256個字元和iso 8859 1 西歐字母 完全相同,其中前半段就是ascii u 0000到u 00ff 每個iso 8859 1碼前面補上乙個空byte 0x00 後才是相應的unicode碼。和我們切身相關...
Java中的時間日期處理
1 精確到毫秒 date 的文字 日期 2 精確到天 calendar 的文字 日期 3 精確到毫秒 date 的日期 文字 4 精確到天 calendar 的日期 文字 當然了 calendar也是可以精確到秒的,比如 set功能 2008年5月12日 星期一 14時28分04秒 calendar...
js中自己遇到的時間處理方式
1 將字串時間格式化成日期 時間中一位兩位造成的擷取錯誤可以這樣避免 varstarttimestr 2017 08 19 09 00 00 var endtimestr 2017 08 19 9 0 0 roomid classroomid 2017 05 19 10 00 00 將caleven...