Android系統自帶的時間類包括:System.nanoTime()、System.currentTimeMillis()、Date()、SimpleDateFormat()、Calendar()等。在應用開發時可以根據具體需求採用不同的方法獲取時間,下面將從多個角度進行詳細闡述。
一、獲取當前系統時間
獲取當前系統時間是應用中最常見的操作之一,可以使用System.currentTimeMillis()方法實現。
long currentTimeMillis = System.currentTimeMillis();
該方法獲取的是自1970年1月1日0時起至當前系統時間的毫秒數。如果需要將其轉換為具體的日期格式,可以使用以下代碼:
Date date = new Date(currentTimeMillis); SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String dateString = formatter.format(date);
其中,SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”)用於將當前系統時間格式化為“年-月-日 時:分:秒”的格式,並將其保存在字符串dateString中。
二、設置定時任務
在應用中,有時需要實現一些定時任務的功能,如定時發送消息、定時提醒等。這時可以使用Android系統提供的Timer和TimerTask類來實現。
Timer類是一個定時器工具,可以用來實現一些定時任務。它提供了四個方法:schedule(TimerTask task, long delay)、schedule(TimerTask task, Date time)、schedule(TimerTask task, long delay, long period)和schedule(TimerTask task, Date firstTime, long period)。
其中,schedule(TimerTask task, long delay)用於在指定的延遲時間後執行一次任務,delay參數表示延遲的毫秒數;schedule(TimerTask task, Date time)用於在指定的時間執行一次任務,time參數表示具體的執行時間;schedule(TimerTask task, long delay, long period)用於在指定的延遲時間後按照指定的時間間隔重複執行任務,period參數表示時間間隔的毫秒數;schedule(TimerTask task, Date firstTime, long period)用於在指定的時間開始按照指定的時間間隔重複執行任務,firstTime參數表示首次執行時間,period參數表示時間間隔的毫秒數。
TimerTask timerTask = new TimerTask() { @Override public void run() { // 執行任務操作 } }; Timer timer = new Timer(); // 指定延遲1000ms後執行任務 timer.schedule(timerTask, 1000);
上述代碼使用Timer和TimerTask類實現了延遲1000ms後執行一次任務的功能。
三、創建鬧鐘提醒
在應用中,有時需要使用鬧鐘提醒功能,讓用戶在指定的時間收到提醒。Android系統提供了AlarmManager類來實現這個功能。
使用AlarmManager需要先註冊一個BroadcastReceiver,用於接收鬧鐘提醒事件。然後創建PendingIntent,將其與BroadcastReceiver關聯,在特定時間發送一個Action為“鬧鐘提醒”的Intent。PendingIntent的獲取方式有兩種:getActivity()和getBroadcast()。
其中,getActivity()方法用於啟動一個Activity;getBroadcast()用於使用BroadcastReceiver。以下是使用getBroadcast()方法實現鬧鐘提醒的代碼:
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); Intent intent = new Intent(this, AlarmReceiver.class); intent.setAction("鬧鐘提醒"); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); // 設置鬧鐘 alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
上述代碼使用AlarmManager類創建了一個鬧鐘提醒,指定了提醒的時間,並將它與BroadcastReceiver關聯起來。
四、使用系統時間服務
除了上述方法外,Android系統還提供了系統時間服務來獲取當前時間。它是一種系統級別的服務,可以在系統啟動之後一直運行,提供時間信息給其他應用使用。
要使用系統時間服務,需要創建一個與其綁定的Service類。綁定Service需要藉助bindService()方法,該方法接收一個Intent對象作為參數,並返回一個表示綁定結果的boolean值。
以下是使用系統時間服務獲取當前時間的示例代碼:
public class TimeService extends Service { private final IBinder mBinder = new TimeBinder(); private SystemClock mSystemClock; private ISystemClock mSystemClockImpl; private Timer mTimer; private TimerTask mTimerTask; private static final long TIMER_INTERVAL = 1000; // 1秒鐘間隔 @Override public void onCreate() { super.onCreate(); mSystemClock = SystemClock.getInstance(); mSystemClockImpl = mSystemClock.getSystemClockImpl(); mTimer = new Timer(); mTimerTask = new TimerTask() { @Override public void run() { // 每秒鐘更新當前時間 mSystemClockImpl.setCurrentTimeMillis(System.currentTimeMillis()); } }; mTimer.schedule(mTimerTask, 0, TIMER_INTERVAL); } @Nullable @Override public IBinder onBind(Intent intent) { return mBinder; } public class TimeBinder extends Binder { public TimeService getService() { return TimeService.this; } } public long getCurrentTimeMillis() { return mSystemClockImpl.getCurrentTimeMillis(); } }
以上代碼中,TimeService類是我們創建的服務類,它繼承自Service。在onCreate()方法中,我們使用了SystemClock類創建了一個系統時鐘對象mSystemClock,並通過它獲取了ISystemClock接口對象mSystemClockImpl。接着,我們使用Timer和TimerTask類每隔1秒鐘就更新一次時間的值。getCurrentTimeMillis()方法用於獲取當前的時間。
原創文章,作者:KIUB,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135792.html