Android - 日期类的使用

本文的合集已经编著成书,高级Android开发强化实战,欢迎各位读友的建议和指导。在京东即可购买:https://item.jd.com/12385680.html

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();
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
android-support-v4.jar是一个由Google开发的Android支持库,它提供了在较旧版本的Android平台上使用最新API的功能。最新版本的android-support-v4.jar是28.0.0,它可以通过Android Studio的Gradle构建工具来引用和使用android-support-v4.jar包含了一系列的方法,可以帮助开发者在较旧的Android版本上实现新功能和提升应用性能。这个库主要包括了以下几个方面的功能: 1. Fragments支持:Fragments是一种用于创建灵活的用户界面的组件,该库提供了对Fragments的完整支持,使开发者能够在较旧的Android设备上使用此功能。 2. 资源兼容性:该库包含了一些辅助,使开发者能够使用较新版本的资源,如主题、样式、尺寸等,而不会出现兼容性问题。 3. 动画支持:android-support-v4.jar提供了一些动画效果的方法,可以帮助开发者实现平滑的过渡效果和用户交互效果。 4. 权限管理:此库还提供了一些方法,用于在较旧的Android版本上处理权限请求和管理。 5. 工具android-support-v4.jar中还包含了一些常用的工具,如日志工具日期时间工具等,方便开发者进行应用开发。 总之,android-support-v4.jar是一个重要的Android支持库,为开发者提供了在较旧版本的Android设备上使用最新API的能力。开发者可以通过Android Studio中的Gradle构建工具引用此库,从而提高应用的兼容性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SpikeKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值