Android - 日期類的使用

來源:互聯網
上載者:User

標籤:mystra   android   date   calendar   日期   

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();    }}

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Android - 日期類的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.