Android日期时间类,解决其他时间类时间会出现误差的bug

本人写时间类的时候,发现网上大多数方法都有一个bug,容易出现时间上的不准确,比如年月日转换的时候,闰年润月转换的时候。后本人重新写了一个方法,修改了这个bug。现帖上代码。转载的请署上我名字,注明转载原网址
package com.android.common.tools;

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

/**
 * Created by PBM on 2015/9/9.
 */
public class DateUtils {
    private static final String DATE_FORMAT = "yyyy-M-d H:m:s";
    private static SimpleDateFormat DATE_FORMAT_TILL_MINUTE = new SimpleDateFormat(
            "m分ss秒");
    private static SimpleDateFormat DATE_FORMAT_TILL_HOUR = new SimpleDateFormat(
            "H时m分");
    private static SimpleDateFormat DATE_FORMAT_TILL_DAY = new SimpleDateFormat(
            "d日 H时m分");
    private static SimpleDateFormat DATE_FORMAT_TILL_MONTH_DAY = new SimpleDateFormat(
            "M月d日");
    private static SimpleDateFormat DATE_FORMAT_TILL_MONTH = new SimpleDateFormat(
            "yyyy年M月");
    private static SimpleDateFormat DATE_FORMAT_TILL_YEAR_DAY = new SimpleDateFormat(
            "yyyy-M-d");
    private static SimpleDateFormat DATE_FORMAT_TILL_LONG = new SimpleDateFormat(
            "yyyy-M-d H:m:s");
    private static SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);

    //获得当前秒的时间
    private static long getSecondTime(){
        Calendar secondStart = Calendar.getInstance();
        secondStart.add(Calendar.SECOND, -1);
        String secondStr = sdf.format(secondStart.getTime());
        Date secondDate = null;
        try {
            secondDate = sdf.parse(secondStr);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        long secondTime = secondDate.getTime();
        return secondTime;
    }
    //获取当前时间前5分钟的时间
    private static long getMinute5Time(){
        Calendar minute5Start = Calendar.getInstance();
        Date nowDate = new Date();
        minute5Start.setTime(nowDate);
        minute5Start.add(Calendar.MINUTE, -5);
        String minute5Str = sdf.format(minute5Start.getTime());
        Date minute5Date = null;
        try {
            minute5Date = sdf.parse(minute5Str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long minute5Time = minute5Date.getTime();
        return minute5Time;
    }
    //获取小时的开始时间
    private static long getHourStartTime(){
        Calendar hourStart = Calendar.getInstance();
        hourStart.set(hourStart.get(Calendar.YEAR), hourStart.get(Calendar.MONTH), hourStart.get(Calendar.DAY_OF_MONTH),hourStart.get(Calendar.HOUR_OF_DAY), 0, 0);
        String hourStr = DATE_FORMAT_TILL_LONG.format(hourStart.getTime());
        Date hourDate = null;
        try {
            hourDate = sdf.parse(hourStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long hourTime = hourDate.getTime();
        return hourTime;
    }
    //获取当天的开始时间
    private static long getTodayStartTime(){
        Calendar todayStart = Calendar.getInstance();
        todayStart.set(todayStart.get(Calendar.YEAR), todayStart.get(Calendar.MONTH), todayStart.get(Calendar.DAY_OF_MONTH),0, 0, 0);
        String todayStr = DATE_FORMAT_TILL_LONG.format(todayStart.getTime());
        Date todayDate = null;
        try {
            todayDate = sdf.parse(todayStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long todayTime = todayDate.getTime();
        return todayTime;
    }
    //获取当月的开始时间
    private static long getMonthStartTime(){
        Calendar monthStart = Calendar.getInstance();
//		monthStart.set(Calendar.DAY_OF_MONTH, 1);
        monthStart.set(monthStart.get(Calendar.YEAR), monthStart.get(Calendar.MONTH), 1,0,0,0);
        String monthStr = DATE_FORMAT_TILL_LONG.format(monthStart.getTime());
        Date monthDate = null;
        try {
            monthDate = sdf.parse(monthStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long monthTime = monthDate.getTime();
        return monthTime;
    }
    //获取当年的开始时间
    private static long getYearStartTime(){
        Calendar yearStart = Calendar.getInstance();
        yearStart.set(yearStart.get(Calendar.YEAR), 0, 1,0,0,0);
        String yearStr = DATE_FORMAT_TILL_LONG.format(yearStart.getTime());
        Date yearDate = null;
        try {
            yearDate = sdf.parse(yearStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long yearTime = yearDate.getTime();
        return yearTime;
    }
    public static String timeLogic(String timeStr) throws ParseException{
        // 创建 Calendar 对象
        Calendar calendar = Calendar.getInstance();
        // 初始化 Calendar 对象,但并不必要,除非需要重置时间
        Date nowDate = new Date();
        calendar.setTime(nowDate);
        Date timeDate = sdf.parse(timeStr);
        long thatTime = timeDate.getTime();
        if(Tools.isEmpty(timeStr)){
            return "";
        }

        if(thatTime < getYearStartTime()){
            return DATE_FORMAT_TILL_YEAR_DAY.format(timeDate);
        }else if(thatTime < getMonthStartTime()){
            //
            return DATE_FORMAT_TILL_MONTH_DAY.format(timeDate);

        }else if(thatTime < getTodayStartTime()){
            //
            return DATE_FORMAT_TILL_DAY.format(timeDate);
        }else if(thatTime < getHourStartTime()){
            //
            return DATE_FORMAT_TILL_HOUR.format(timeDate);
        }
        else if(thatTime < getMinute5Time()){
            //
            return DATE_FORMAT_TILL_HOUR.format(timeDate);
        }else if(thatTime < getSecondTime()){
            //说明是5分钟内
            return "刚刚";
        }
        else{
            return "";
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值