時間戳時間日期 && Android SystemClock 小結


在限時搶購的活動的,倒計時的當前時間,必須是獲取的網絡時間,不然系統工具獲得只是手機的時間,是很有可能出現不一致的情況的~

CountDownTimer在使用的時候,需要在Activity銷燬的時候,進行回收處理。mCountDownTimer.cancel();

可以考慮在項目初始化的時候,通過工具類+Timer計時器,一直保存一個同步的互聯網時間。



String類型的php時間必須使用Long類型來轉化,不然的話,2038年的時間就會超過int的最大值、、、
// String time = sdf.format((long) (Integer.parseInt(longString)) * 1000);
String time = sdf.format((long) (Long.parseLong(longString)) * 1000);


時間戳轉化成日期
String time = format.format(new Date(vtime * 1000));
// String time = format.format(vtime);
// String time = format.format(new Date(vtime * 1000));
String time = format.format(new Date((long) vtime * 1000));
// LogUtils.e("mxg", "vtime == " + vtime + ";time == " + time);
tv_renewal_time.setText("有效期至:" + time.replace("-", "."));



注意:以後計算時間的間隔,全部使用SystemClock.elapsedRealtime()來進行比較;(可以考慮System.currentTimeMillis)

在Java中我們處理線程同步問題時,處理延遲可能會使用Thread類的sleep方法,這裏拋開concurrent類的一些方法;

值得一提的是,這個類還提供了另外一個方法,  public static void sleep(long ms),
這個方法就是封裝了Thread.sleep方法,但是不會拋出InterruptedException


http://blog.csdn.net/tianfeng701/article/details/7562359

在Andriod中關於線程一部分中經常會遇到計算時間的操作,這裏面應用較多的是SystemClock類,這個類僅僅是一個獲取系統時間、運行時間的工具類。

這個類有兩個主要的靜態方法uptimeMillis()和 elapsedRealtime().

我們來看一下這兩個函數的實際含義,以下是源碼中的註釋

  Returns milliseconds since boot, not counting time spent in deep sleep.      

  This value may get reset occasionally         

native public static long uptimeMillis();

Returns milliseconds since boot, including time spent in sleep.         

native public static long elapsedRealtime();


由此可見,

uptimeMillis()返回的是系統從啓動到當前處於非休眠期的時間。

elapsedRealTime()返回的是系統從啓動到現在的時間。

 

值得一提的是,這個類還提供了另外一個方法,  public static void sleep(long ms),

這個方法就是封裝了Thread.sleep方法,但是不會拋出InterruptedException


-----------------------------------------------------------補充內容-------------------------------------------------------------------------------------------------------

所謂android深度睡眠,即屏幕關閉後,一段時間不做任何操作,不連接usb,然後在一定時間後,手機很多服務、進程都睡眠了,不再運行。


很多情況下,不管是我們自己使用時間間隔來做一些算法,或是調用系統的API,比如動畫效果,都會需要基於時間間隔來做,通常做法是:記錄開始時間 startTime,然後每次回調時,獲取當前時間  currentTime,計算差值 = currentTime - startTime,而獲取當前時間,系統提供了兩種方法:
SystemClock.uptimeMillis 和 System.currentTimeMillis

這兩種方法有何區別呢?
1. SystemClock.uptimeMillis()  // 從開機到現在的毫秒數(手機睡眠的時間不包括在內);
2. System.currentTimeMillis() // 從1970年1月1日 UTC到現在的毫秒數;
但是,第2個時間,是可以通過System.setCurrentTimeMillis修改的,那麼,在某些情況下,一但被修改,時間間隔就不準了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章