編輯:關於Android編程
Android中Calendar與Date的區別以及消除時區對日期操作影響的方法
在Android中的日期操作常用的有三種方式,分別是:
Date類型
Calendar類型
Unix時間戳
其中,Unix時間戳在計算上最為方便和靈活,效率也高;而Date和Calendar則在一些具體的日期計算上更為便利。其中,在進行日期轉化的時候,經常會用到SimpleDateFormat類來進行格式化,包括將特定格式字符串轉化為Date對象,以及將Date對象格式化為特定格式字符串。
首先來比較一下Date和Calendar的不同。使用過日期轉Unix時間戳的人很有可能會遇到一個問題,那就是Date或者SimpleDateFormat獲得的時間戳跟Calendar獲得的時間戳有差值,使用中國時區的話這個差值應該是28800000ms,也就是8小時。顯然,這8個小時的差別就是由於時區產生的,而如果在開發與日期時間緊密相關的程序時忽略了這一時差,很可能就會產生許多匪夷所思的誤差和結果。在Android中,Calendar是能夠自動根據手機所設置的時區來調整時間戳的,也就是該時區真實的時間戳;Date和SimpleDateFormat獲得的時間戳則不考慮時區,而是獲取標准的GMT時間戳。這兩者的時間戳差可以通過使用TimeZone.getDefault().getRawOffset()方法來取得。那麼現在就可以很容易地得出解決Date、SimpleDateFormat與Calendar在時間戳上的時差問題的方法,簡單描述如下:
Calendar calendar = Calendar.getInstance();//獲取當前日歷對象
long unixTime = calendar.getTimeInMillis();//獲取當前時區下日期時間對應的時間戳
long unixTimeGMT = unixTime - TimeZone.getDefault().getRawOffset();//獲取標准格林尼治時間下日期時間對應的時間戳
Date date = new Date();//獲取當前日期對象
unixTimeGMT = unixTime = date.getTimeInMillis();//獲取當前時區下日期時間對應的時間戳
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置格式
String dateString = "2010-12-26 03:36:25";//設定具有指定格式的日期字符串
unixTimeGMT = unixTime = format.format(date);//獲取當前時區下日期時間對應的時間戳
顯然,在開發中必須讓時間戳統一,這樣才能避免許多尴尬的問題。那麼在實際開發過程中,究竟應該是使用手機指定時區的時間戳還是標准時間戳呢?個人認為應該使用標准時間戳,因為用戶很有可能會有更改時區的操作出現,如果使用對應時區的時間戳,並且時間戳作為某種標記量存入了數據庫,那麼一旦時區發生改變,已存數據將會與當前時區設置產生問題;而使用標准時間戳則可以避免這一問題,因為通過程序可以很容易地將時間戳轉化為標准時間戳,並且標准時間戳是固定的,這樣就能保證即使在修改了時區的情況下,也能正確處理日期時間。
二. Android開發中 獲取當前Android的年月日時分秒的時間
Android的文件有建議用Time代替Calendar。用Time對CPU的負荷會較小。在寫Widget時特別重要。
Time t=new Time(); // or Time t=new Time("GMT+8"); 加上Time Zone資料。
package ***;
import android.app.Activity;
import android.os.Bundle;
import android.text.format.Time;
import android.widget.TextView;
public class ShowTime extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView myTextView = (TextView)findViewById(R.id.myTextView);
Time time = new Time("GMT+8");
time.setToNow();
int year = time.year;
int month = time.month;
int day = time.monthDay;
int minute = time.minute;
int hour = time.hour;
int sec = time.second;
myTextView.setText("當前時間為:" + year +
"年 " + month +
"月 " + day +
"日 " + hour +
"時 " + minute +
"分 " + sec +
"秒");
}
}
唯一不足是取出時間只有24小時模式.
========================================================================================
如何獲取Android系統時間是24小時制還是12小時制
ContentResolver cv = this.getContentResolver();
String strTimeFormat = android.provider.Settings.System.getString(cv,
android.provider.Settings.System.TIME_12_24);
if(strTimeFormat.equals("24"))
{
Log.i("activity","24");
} www.2cto.com
利用Calendar獲取年月日時分秒
Calendar c = Calendar.getInstance();
取得系統日期:year = c.get(Calendar.YEAR)
month = c.get(Calendar.MONTH)
day = c.get(Calendar.DAY_OF_MONTH)
取得系統時間:hour = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE)
Android 的菜單機制,在 Android 3.0 之前和之後有很大的去別,Android 3.0 推出 ActionBar ,導航的 UI 交互有很大的變化,但菜單
Android 自定義輸入支付密碼的軟鍵盤 &nbs
1:服務端使用PHP 復制代碼 代碼如下:<?php echo date(Y-m-d H:i:s);?>2:activit
0x00為了避免我們的so文件被動態分析,我們通常在so中加入一些反調試代碼,常見的Android native反調試方法有以下幾種。1、直接調用ptrace(PTRAC