天天看點

[Android開發筆記]計算日期差的方法實作

  自己也玩遊戲,最近在玩暴雪的風暴英雄,打開好友清單的時候會看見好友使用者名下面會顯示離開了多長時間,如下圖:

[Android開發筆記]計算日期差的方法實作

  對于這個功能自己覺得還是挺好的,于是自己想實作下,由于自己剛剛開始接觸android開發,是以很多東西都不是很清楚,也不熟練,最先開始自己嘗試着去寫的時候,對于日期完全不知道如何處理,後來就幹脆用幾個int類型變量分别去記錄年月日小時分鐘和秒,然後再用一個String來接收它們拼起來的日期。

  為了得到這個日期差,第一次嘗試着去寫的時候,所有的離開時間全部采用if來判斷,最後寫完,整整寫了432行代碼,而且寫得自己的是頭昏腦脹的。後來自己覺得肯定還有更為簡單的方法,于是到處查資料,到處問朋友,苦心不負啊,最後還真被我用個簡單的方法寫出來了,代碼如下:

1.MainActivity.java

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
	private TextView tvLastDate, tvThisDate, tvLeaveDay;
	private SharedPreferences mPreferences;
	private SimpleDateFormat simpleDateFormat;
	private String strCurrentDate, strLastDate;
	private ParsePosition pos;
	private int day, hour, minute;
	private long between;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		GetCurrentDate();
		simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		strCurrentDate = simpleDateFormat.format(GetCurrentDate());
		tvLastDate = (TextView) findViewById(R.id.mainlayout_lastdate);
		tvThisDate = (TextView) findViewById(R.id.mainlayout_thisdate);
		tvLeaveDay = (TextView) findViewById(R.id.mainlayout_leaveday);
		mPreferences = getSharedPreferences("lastdate", 0);
		strLastDate = mPreferences.getString("date", strCurrentDate);
		if (!strLastDate.equals("")) {
			pos = new ParsePosition(0);
			between = (GetCurrentDate().getTime() - simpleDateFormat.parse(
					strLastDate, pos).getTime()) / 1000;
			day = (int) between / (24 * 3600);
			hour = (int) between % (24 * 3600) / 3600;
			minute = (int) between % 3600 / 60;
			tvLastDate.setText("您上次登入的時間是:" + strLastDate);
			tvThisDate.setText("您這次登入的時間是:" + strCurrentDate);
			if (day > 0) {
				tvLeaveDay.setText("距您離開:" + day + "天" + hour + "小時" + minute
						+ "分鐘" + "左右");
			}
			if (day == 0 && hour > 0) {
				tvLeaveDay
						.setText("距您離開:" + hour + "小時" + minute + "分鐘" + "左右");
			}
			if (hour == 0 && minute > 0) {
				tvLeaveDay.setText("距您離開:" + minute + "分鐘" + "左右");
			}
		}
	}

	@Override
	protected void onPause() {
		Editor mEditor = mPreferences.edit();
		mEditor.putString("date", strCurrentDate);
		mEditor.commit();
		super.onPause();
	}

	public Date GetCurrentDate() {
		Calendar calendar = Calendar.getInstance();
		Date mDate = calendar.getTime();
		return mDate;
	}
}
           

2.activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/mainlayout_lastdate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/mainlayout_thisdate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/mainlayout_leaveday"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
           

運作圖檔:

[Android開發筆記]計算日期差的方法實作

繼續閱讀