Android 有关时间日期工具类

package com.abc.Utils;

import android.text.TextUtils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;


public class DateTimeUtil {

    /**
     * 获取Date类型yyyy-MM-dd格式的当前时间
     *
     * @return Date
     */
    public static Date getCurrentDate() {
        Date date = new Date();
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String dateStr = format.format(date);
        Date curDay = null;
        try {
            curDay = format.parse(dateStr);
        } catch (ParseException e) {
            Logger.e(e.getMessage(), e.toString());
        }

        return curDay;
    }

    /**
     * 获得指定月份的,月末日期
     *
     * @param date 指定日期
     * @return String
     */
    public static String getMonthEndStringDateByMonth(String date, String dateFormat) {
        Calendar c = Calendar.getInstance();
        c.setTime(transformStringToDate(date, dateFormat));
        c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
        return transformDateToString(c.getTime(), dateFormat);
    }

    /**
     * 获取当前月份的天数
     *
     * @return Integer
     */
    public static Integer getCurrentMothDays(){
        Date currentDate = getCurrentDate();
        String currentDateStr = transformDateToString(currentDate, "yyyy-MM-dd");
        return getMonthDays(currentDateStr);
    }

    /**
     * 获取指定月份的天数
     *
     * @param date 指定日期
     * @return Integer
     */
    public static Integer getMonthDays(String date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(transformStringToDate(date, "yyyy-MM-dd"));
        //把日期设置为当月第一天
        calendar.set(Calendar.DATE, 1);
        //日期回滚一天,也就是最后一天
        calendar.roll(Calendar.DATE, -1);
        int maxDate = calendar.get(Calendar.DATE);
        return maxDate;
    }

    /**
     * 将Date类型转换为日期字符串
     *
     * @param date       日期字符串
     * @param dateFormat 日期格式
     * @return dateStr
     */
    public static String transformDateToString(Date date, String dateFormat) {
        if (date == null || TextUtils.isEmpty(dateFormat)) {
            return "";
        }
        DateFormat format = new SimpleDateFormat(dateFormat);
        return format.format(date);
    }

    /**
     * 将日期字符串转换为Date类型
     * String类型的日期格式和要转化的format格式必须一样
     *
     * @param dateStr    日期字符串
     * @param dateFormat 日期格式  yyyy-MM-dd
     * @return date
     */
    public static Date transformStringToDate(String dateStr, String dateFormat) {
        Date date = null;
        DateFormat format = new SimpleDateFormat(dateFormat);
        try {
            date = format.parse(dateStr);
        } catch (ParseException e) {
            Logger.e(e.getMessage(), e.toString());
        }

        return date;
    }

    /**
     * 获取某日期区间的所有日期  日期倒序
     *
     * @param startDate  开始日期
     * @param endDate    结束日期
     * @param dateFormat 日期格式
     * @return 区间内所有日期
     */
    public static List<String> getPerDaysByStartAndEndDate(String startDate, String endDate, String dateFormat) {
        DateFormat format = new SimpleDateFormat(dateFormat);
        try {
            Date sDate = format.parse(startDate);
            Date eDate = format.parse(endDate);
            long start = sDate.getTime();
            long end = eDate.getTime();
            if (start > end) {
                return null;
            }
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(eDate);
            List<String> res = new ArrayList<String>();
            while (end >= start) {
                res.add(format.format(calendar.getTime()));
                calendar.add(Calendar.DAY_OF_MONTH, -1);
                end = calendar.getTimeInMillis();
            }
            return res;
        } catch (ParseException e) {
            Logger.e(e.getMessage(), e.toString());
        }
        return null;
    }

    /**
     * 获取某日期区间的所有12月31日的日期  日期倒序
     *
     * @param startDate 开始日期   yyyy-MM-dd
     * @param endDate   结束日期   yyyy-MM-dd
     * @return 区间内所有日期
     */
    public static List<String> getPerYearByStartAndEndDate(String startDate, String endDate) {
        String start = startDate.substring(0, startDate.indexOf("-"));
        String end = endDate.substring(0, endDate.indexOf("-"));
        int s = Integer.parseInt(start);
        int e = Integer.parseInt(end);
        if (!(end + "-12-31").equals(endDate)) {
            e--;
        }
        List<String> res = new ArrayList<String>();
        while (e >= s) {
            res.add(e + "-12-31");
            e--;
        }
        return res;
    }

    /**
     * 获取某日期区间的年份
     *
     * @param startDate 开始日期   yyyy
     * @param endDate   结束日期   yyyy
     * @return 区间内所有日期
     */
    public static List<String> getYearsByStartAndEndDate(String startDate, String endDate) {
        Integer s = Integer.parseInt(startDate);
        Integer e = Integer.parseInt(endDate);
        List<String> res = new ArrayList<String>();
        while (e >= s) {
            res.add(e.toString());
            e--;
        }
        return res;
    }

    /**
     * 将时间戳转换为时间
     *
     * @param s 时间戳
     * @return "yyyy-MM-dd HH:mm:ss"
     */
    public static String stampToDate(String s) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long lt = new Long(s);
        Date date = new Date(lt);
        String res = simpleDateFormat.format(date);
        return res;
    }

    /**
     * 获取传入时间某几年之前的日期
     *
     * @param date     指定日期
     * @param someYear 某几年
     * @return String
     */
    public static String getLastSomeYear(String date, Integer someYear) {
        Integer lastSomeYear = Integer.parseInt(date.substring(0, 4)) - someYear;
        date = lastSomeYear + date.substring(4);
        return date;
    }

    /**
     * 获取指定dateFormat格式的date,某几个月之前的日期
     *
     * @param date       传入日期
     * @param dateFormat 日期格式
     * @param someMonth  某几个月
     * @return Date
     */
    public static Date getLastSomeMonth(String date, String dateFormat, Integer someMonth) {
        SimpleDateFormat format = new SimpleDateFormat(dateFormat);
        Calendar c = Calendar.getInstance();
        c.setTime(transformStringToDate(date, dateFormat));
        //得到前几个月
        c.add(Calendar.MONTH, -(someMonth));
        Date time = transformStringToDate(format.format(c.getTime()), dateFormat);
        return time;
    }

    /**
     * 功能描述:时间相减得到天数
     *
     * @param beginDateStr 开始日期
     * @param endDateStr   结束日期
     * @return long
     */
    public static long getDaySub(String beginDateStr, String endDateStr) {
        long day = 0;
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date beginDate;
        Date endDate;
        try {
            beginDate = format.parse(beginDateStr);
            endDate = format.parse(endDateStr);
            day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
        } catch (ParseException e) {
            Logger.e(e.getMessage(), e.toString());
        }

        return day;
    }

    /**
     * 比较日期大小
     *
     * @param DATE1      第一个时间
     * @param DATE2      第二个时间
     * @param dateFormat 日期格式
     * @return Integer null日期格式有误,1:第一个日期大,0:两个日期一样,-1:第二个日期大
     */
    public static Integer compareDate(String DATE1, String DATE2, String dateFormat) {
        DateFormat df = new SimpleDateFormat(dateFormat);
        try {
            Date dt1 = df.parse(DATE1);
            Date dt2 = df.parse(DATE2);
            if (dt1.getTime() > dt2.getTime()) {
                return 1;
            } else if (dt1.getTime() < dt2.getTime()) {
                return -1;
            } else {
                return 0;
            }
        } catch (Exception e) {
            Logger.e(e.toString(), e.toString());
        }
        return null;
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值