Android - 日期類的使用

jopen 8年前發布 | 7K 次閱讀 Android開發 移動開發

Android的日期類, Date和Calendar, Date顯示, Calendar計算.
處理順序: String -> Date -> Calendar.
示例實現了幾個比較常見的方法:
(1) 日期相隔天數;
(2) 字符串轉換Date類;
(3) 獲取之前的日期;
(4) 判斷是否超過今天等.


代碼:

package me.chunyu.Pedometer.manager;

import android.util.Pair;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import me.chunyu.Pedometer.database.counter.DailyData;

/** * 日期管理器, 輸入日期的格式"yyyy-MM-dd"的字符串數組, 可能不連續. * 提取步數, 需要把擁有步數的項提取出來, 未有步數的項至為0. * 使用時, 再根據日期進行統計. * <p/> * Created by wangchenlong on 15/8/17. */
public class DateManager {

    private static DateManager sInstance; // 單例
    private final RecordManager mRecordManager; // 數據管理器
    private final SimpleDateFormat sFormatter; // 格式化

    private DateManager() {
        mRecordManager = RecordManager.getInstance();
        sFormatter = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
    }

    public static DateManager getInstance() {
        if (sInstance == null) {
            sInstance = new DateManager();
        }
        return sInstance;
    }

    /** * 從RecordManager獲取數據, 轉換為步數數組, 從當前日期一直至最早日期. * * @return 步數數組[當前日期, 至, 最早日期] */
    public ArrayList<Pair<String, Integer>> getDataDates() {
        String[] days = mRecordManager.getSortedFilenames();
        if (days.length <= 0) {
            return null;
        }

        String firstDay = days[0];
        String lastDay = days[days.length - 1];

        if (isAfterToday(lastDay)) {
            lastDay = sFormatter.format(new Date());
        }

        long n = daysBetweenTwoDates(firstDay, lastDay) + 1;

        ArrayList<Integer> allSteps = new ArrayList<>();
        ArrayList<String> allDays = new ArrayList<>();

        for (int i = 0; i < n; ++i) {
            String perDay = getBeforeDay(lastDay, i);
            DailyData dailyData = mRecordManager.getDailySteps(perDay);
            if (dailyData != null) {
                int[] steps = dailyData.steps;
                int maxStep = steps[steps.length - 1];
                allSteps.add(maxStep);
            } else {
                allSteps.add(0);
            }
            allDays.add(perDay);
        }

        ArrayList<Pair<String, Integer>> totalData = new ArrayList<>();
        for (int i = 0; i < allSteps.size(); ++i) {
            Pair<String, Integer> dateWithStep = Pair.create(allDays.get(i), allSteps.get(i));
            totalData.add(dateWithStep);
        }

        return totalData;
    }

    /** * 判斷兩個日期相隔的天數 * * @param earlyDay 較早的日期 * @param lateDay 較晚的日期 * @return 相隔天數 */
    public long daysBetweenTwoDates(String earlyDay, String lateDay) {
        Date earlyDate = getDateFromStr(earlyDay);
        Date lateDate = getDateFromStr(lateDay);

        Calendar startCalendar = Calendar.getInstance();
        Calendar lateCalendar = Calendar.getInstance();
        startCalendar.setTime(earlyDate);
        lateCalendar.setTime(lateDate);

        long diff = lateCalendar.getTimeInMillis() - startCalendar.getTimeInMillis();

        return diff / (24 * 60 * 60 * 1000);
    }

    /** * 把日期字符串轉換為Date類 * * @param day 日期字符串 * @return 日期Data類 */
    public Date getDateFromStr(String day) {
        Date date;
        try {
            date = sFormatter.parse(day);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
        return date;
    }

    /** * 獲取之前某天的日期 * * @param day 時間基準 * @param i 相差天數 * @return 前幾天的日期 */
    public String getBeforeDay(String day, int i) {
        Date date = getDateFromStr(day);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_YEAR, i * (-1));
        return sFormatter.format(calendar.getTime());
    }

    /** * 判斷時間是否超過今日 * * @param day 時間 * @return 是否 */
    public boolean isAfterToday(String day) {
        Date lateDate = getDateFromStr(day);
        Date todayDate = new Date();
        return lateDate.getTime() > todayDate.getTime();
    }
}

來自: http://blog.csdn.net//caroline_wendy/article/details/47751827

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!