安卓编程日志输出

日志工具类

import android.os.SystemClock;
import android.util.Log;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedDeque;

/**
 * 生成日志
 */
public class LogManager {
    private final String TAG = "LOG";
    private static Queue<String> backClipLogCash = new ConcurrentLinkedDeque<>();
    private static Queue<String> errLogCash = new ConcurrentLinkedDeque<>();
    private static LogManager instance = null;

    /**
     * 写入日志
     */
    public static void WriteBackClipLog(String log) {
        if (instance == null) {
            instance = new LogManager();
        }
        backClipLogCash.add(log);
    }

    /**
     * 写入错误日志
     */
    public static void WriteErrLog(String log) {
        if (instance == null) {
            instance = new LogManager();
        }
        errLogCash.add(log);
    }

    ///sdcard/log/backClip20221223.txt;
    String logpath = CommonTool.getLyLogDirPath() + File.separator;
    String backClipFileName;
    String errFileName;

    public LogManager() {
        backClipFileName = logpath + "log" + DateUtil.getCurrentDateStr(DateUtil.SHORT_PATTERN_NUM) + ".txt";
        errFileName = logpath + "err" + DateUtil.getCurrentDateStr(DateUtil.SHORT_PATTERN_NUM) + ".txt";
        init();
        startBackClipWriteThread();
        startErrWriteThread();
    }

    /**
     * 初始化
     */
    private void init() {
        try {
            System.out.println("初始化");
            File backClipFile = new File(backClipFileName);
            createFile(backClipFile);
            File errFile = new File(errFileName);
            createFile(errFile);
            File dir = new File(logpath);
            String k = DateUtil.getCurrentDateStr(DateUtil.SHORT_PATTERN_NUM);
            if (dir.length() > 0) {
                for (String name : dir.list()) {
                    String fileDate = name.substring(3, 11);
                    if (Long.parseLong(fileDate) < Long.parseLong(k) - 30) {
                        File temp = new File(logpath + name);
                        temp.delete();
                    }
                }
            }
        } catch (Exception ex) {
            LogManager.WriteErrLog(TAG + ":初始化:" + ex.getMessage());
        }
    }

    /**
     * 开启日志写入线程
     */
    private void startBackClipWriteThread() {
        Thread t = new Thread(() -> {
            StringBuilder backClipSb = new StringBuilder();
            int count;
            while (true) {
                SystemClock.sleep(1000);
                startWrite(backClipSb, backClipLogCash, backClipFileName, ":startBackClipWriteThread:");
            }
        });
        t.start();
    }

    /**
     * 开启错误日志写入线程
     */
    private void startErrWriteThread() {
        Thread t = new Thread(() -> {
            StringBuilder backClipSb = new StringBuilder();
            int count;
            while (true) {
                SystemClock.sleep(1000);
                startWrite(backClipSb, errLogCash, errFileName, ":startErrWriteThread:");
            }
        });
        t.start();
    }

    private void startWrite(StringBuilder backClipSb, Queue<String> Cash, String fileName, String s) {
        int count;
        try {
            backClipSb.delete(0, backClipSb.length());
            count = 0;
            while (count < 5 && Cash.size() > 0) {
                backClipSb.append(Cash.poll()).append("\r\n");
                count++;
            }

            if (backClipSb.length() > 0) {
                try {
                    FileWriter writer = new FileWriter(fileName, true);
                    writer.write(backClipSb.toString());
                    writer.close();
                } catch (IOException e) {
                    LogManager.WriteErrLog(TAG + s + e.getMessage());
                }
            }
        } catch (Exception ex) {
            LogManager.WriteErrLog(TAG + s + ex.getMessage());
        }
    }

    /**
     * 创建文件
     */
    private void createFile(File file) {
        if (file == null) return;
        if (file.exists()) {
            return;
        }
        File parentFile = file.getParentFile();
        if (parentFile == null) return;
        if (!parentFile.exists()) {
            parentFile.mkdirs();
        }
        try {
            file.createNewFile();
        } catch (IOException e) {
            Log.d(TAG ,":CREATE_FILE:创建" + file.getName() + "文件失败");
        }
    }
}

Date日期类


import android.text.TextUtils;
import android.util.Log;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @Description 时间工具类
 * @author Leegern
 * @date 2013-7-30 下午01:44:39
 */
public class DateUtil {
	/**
	 * 默认格式化时间格式
	 */
	public static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
	public static final String DEFAULT_PATTERN_NUM = "yyyyMMddHHmmss";
	public static final String SHORT_PATTERN_NUM = "yyyyMMdd";
	public static final String SHORT_PATTERN = "yyyy-MM-dd";
	public static final String MOUDLE_PATTERN = "yyyy-MM-dd HH:mm";
	public static final String MONTH_PATTERN = "yyyy-MM";
	public static final String YEAR_PATTERN = "yyyy";
	public static final String HOUR_MINUTE_PATTERN = "HH:mm";
    public static final String MINUTE_PATTERN = "mm";
    public static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";
	/**
	 * 获取当前系统时间字符串
	 * @param pattern 时间格式
	 * @return 时间字符串
	 */
	public static String getCurrentDateStr(String pattern){
		if (null == pattern || pattern.length()==0) {
			pattern = DEFAULT_PATTERN;
		}
		return formatDate(new Date(), pattern);
	}
	
	
	/**
	 * 获取当前系统时间字符串,默认返回的格式:yyyy-MM-dd HH:mm:ss
	 * @return 时间字符串
	 */
	public static String getCurrentDateStr(){
		
		return getCurrentDateStr(null);
	}
	
	/**
	 * 获取昨天时间字符串
	 * @param pattern 时间格式
	 * @return 时间字符串
	 */
	public static String getYesterdayDateStr(String pattern){
		if (null == pattern ||pattern.length()==0) {
			pattern = DEFAULT_PATTERN;
		}
		Date date = getSomeoneDate(-1);
		return formatDate(date, pattern);
	}
	
	/**
	 * 
	 * 函数功能说明  :获取明天时间字符串
	 * @param pattern
	 * @return      
	 * @return  String     
	 * @throws
	 */
	public static String getTomorrowDateStr(String pattern){
		if (null == pattern || pattern.length()==0) {
			pattern = DEFAULT_PATTERN;
		}
		Date date = getSomeoneDate(1);
		return formatDate(date, pattern);
	}
	
	/**
	 * 获取昨天时间字符串,默认返回的格式:yyyy-MM-dd HH:mm:ss
	 * @return 时间字符串
	 */
	public static String getYesterdayDateStr(){
		
		return getYesterdayDateStr(null);
	}
	
	/**
	 * 获取当前时间一周前的时间字符串
	 * @param pattern 时间格式
	 * @return 时间字符串
	 */
	public static String getAWeekAgoDateStr(String pattern){
		if (TextUtils.isEmpty(pattern)) {
			pattern = DEFAULT_PATTERN;
		}
		return formatDate(getSomeoneDate(-7), pattern);
	}
	
	/**
	 * 获取本月某天的日期
	 * @param num 天数
	 * @return 日期
	 */
	public static Date getSomeoneDate(int num){
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DAY_OF_MONTH, num);
		return calendar.getTime();
	}
	
	/**
	 * 将字符串日期转换为Date日期 
	 * @param dateStr 字符串日期
	 * @return Date日期
	 * @throws ParseException 
	 */
	public static Date convertStrToDate(String dateStr){
		if (TextUtils.isEmpty(dateStr)){
			return null;
		}
		return parseDate(dateStr, DEFAULT_PATTERN);
	}
	
	/**
	 * 
	 * 函数功能说明  :将字符串日期转换为指定格式的Date日期
	 * @param dateStr
	 * @param pattern
	 * @return      
	 * @return  Date     
	 * @throws
	 */
	public static Date convertStrToDate(String dateStr,String pattern){
		if (TextUtils.isEmpty(dateStr)){
			return null;
		}
		return parseDate(dateStr, pattern);
	}
	
	/**
	 * 
	 * 函数功能说明  :将字符串日期转换为指定格式的timeStamp日期
	 * @param dateStr
	 * @param pattern
	 * @return      
	 * @return  Date     
	 * @throws
	 */
	public static Timestamp convertStrToTimestamp(String dateStr,String pattern){
		if (TextUtils.isEmpty(dateStr)){
			return null;
		}
		DateFormat format = new SimpleDateFormat(pattern);
		//严格匹配日期格式
		format.setLenient(false);
		Timestamp ts = new Timestamp(0);
		try {
			ts = new Timestamp(format.parse(dateStr).getTime());
		} catch (ParseException e) {
			Log.d("TAG", "DateUtil -- convertStrToTimestamp format date error!");
		}
		return ts;
	}
	
	/**
	 * 函数功能说明 :获取给定日期的上个月同期日期
	 * @param date
	 * @return Date
	 */
	public static Date getLastMonthDate(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH, -1);
		return cal.getTime();
	}
	
	/**
	 * 
	 * 函数功能说明  :获取给定日期的几个月前或者后同期日期
	 * @param date
	 * @param i (正数为后,负数为前)
	 * @return      
	 * @return  Date     
	 * @throws
	 */
	public static Date getMonthDate(Date date,int i) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH, i);
		return cal.getTime();
	}
	
	/**
	 * 函数功能说明 :获取给定日期的下个月同期日期
	 * @param date
	 * @return Date
	 */
	public static Date getNextMonthDate(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH, 1);
		return cal.getTime();
	}
	
	 /**
     * 函数功能说明 :获取给定日期的下一天的日期
     * @param date
     * @return Date
     */
    public static Date getNextDayDate(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DAY_OF_MONTH, 1);
        return cal.getTime();
    }

    public static Date getSomeNextDayDate(Date date,int n) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DAY_OF_MONTH, n);
        return cal.getTime();
    }

    /**
     * 函数功能说明 :获取给定日期的下n小时的日期
     * @param date
     * @return Date
     */
    public static Date getSomeNextHourDate(Date date, int n) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.HOUR, n);
        return cal.getTime();
    }

    /**
     * 函数功能说明 :获取给定日期的下n分钟的日期
     * @param date
     * @return Date
     */
    public static Date getNextMinuteDate(Date date, int n) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MINUTE, n);
        return cal.getTime();
    }

    /**
     * 函数功能说明 :获取给定日期的下一秒的日期
     * @param date
     * @return Date
     */
    public static Date getNextSecondDate(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.SECOND, 1);
        return cal.getTime();
    }

    public static Date getSomeNextSecondDate(Date date,int n) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.SECOND, n);
        return cal.getTime();
    }

	/**
	 * 函数功能说明 :获取给定日期的上个年同期日期
	 * @param date
	 * @return Date
	 */
	public static Date getLastYearDate(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.YEAR, -1);
		return cal.getTime();
	}
	
	
	public static Date getYearFirstDate(Date date){
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.MONTH,0);
		calendar.set(Calendar.DAY_OF_MONTH,1);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		return calendar.getTime();
		
		
	}
	/**
	 * 函数功能说明 :获取给定日期的下个年同期日期
	 * @param date
	 * @return Date
	 */
	public static Date getNextYearDate(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.YEAR, 1);
		return cal.getTime();
	}
	/**
	 * 获取当前月的第一天(不包括时分秒)  
	 * @return
	 */
	public  static Date getCurrMonthFirstDay(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND, 0);
		return calendar.getTime();
	}
	
	/**
	 * 获取上个月的第一天
	 * */
	public static Date getPreMonthFristDay(Date date)
	{
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.MONTH, -1);
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.MILLISECOND, 0);
		return calendar.getTime();
	}
	
	/**
	 * 将Date日期 转换为字符串日期
	 * @param date     日期
	 * @param  pattern 格式
	 * @return 字符串日期
	 */
	public static String convertDateToStr(Date date, String pattern){
		if (null == date){
			return null;
		}
		if (TextUtils.isEmpty(pattern)) {
			pattern = DEFAULT_PATTERN;
		}
		return formatDate(date, pattern);
	}
	
	/**
	 * 将字符串日期按照给定的格式转化为Date日期
	 * @param dateStr 字符串日期
	 * @param pattern 格式
	 * @return
	 * @throws ParseException
	 */
	public static Date parseDate(String dateStr, String pattern){
		if(TextUtils.isEmpty(dateStr)||dateStr.length()!=pattern.length()){
			return null;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		try {
			return sdf.parse(dateStr);
		} catch (ParseException e) {
			Log.d("TAG", "DateUtil -- parseDate parse date error!");
		}
		return null;
	}
	
	/**
	 * 将日期按照给定的格式转化为字符串
	 * @param date    日期
	 * @param pattern 格式
	 * @return 日期字符串
	 */
	private static String formatDate(Date date, String pattern){
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		return sdf.format(date);
	}
	
	 // 给定一个日期,获得这个日期所在周的第一天(周日)的日期
    // 输入参数:String date
    // -----------------------------------------------------
    public static String getMonday(String date) {
        SimpleDateFormat format = new SimpleDateFormat(SHORT_PATTERN);
        Date d = null;
        try {
            d = format.parse(date);
        } catch(ParseException e) {
			Log.d("TAG", "getMonday error ParseException");
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
			cal.add(Calendar.DAY_OF_MONTH, -1);
		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        return format.format(cal.getTime());
    }
   
    // 给定一个日期,获得这个日期所在周的周六的日期
    // 输入参数:String date
    // -----------------------------------------------------
	public static String getSunday(String date) {
        SimpleDateFormat format = new SimpleDateFormat(SHORT_PATTERN);
        Date d = null;
        try {
            d = format.parse(date);
        } catch(ParseException e) {
			Log.d("TAG", "getSunday error ParseException");
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
    
        if(cal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY){
            cal.set(Calendar.DAY_OF_WEEK,Calendar.SATURDAY);
            cal.add(Calendar.DAY_OF_MONTH, 1);
        }
        return format.format(cal.getTime());
    }


    // 给定一个日期,获得是周几 (1代表周日...)
    public static int getDateWeekNum(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.DAY_OF_WEEK);
    }

   
    // 给定一个日期和天数,获得这个相加后的日期
    // 输入参数:String date,int iday
    // -----------------------------------------------------
    @SuppressWarnings("static-access")
    public static String addDay(String date,int iday) {
        SimpleDateFormat format = new SimpleDateFormat(SHORT_PATTERN);
        Date d = null;
        try {
            d = format.parse(date);
        } catch(ParseException e) {
			Log.d("TAG", "addDay error ParseException");
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(d);
        cal.add(cal.DAY_OF_YEAR,iday);
        return format.format(cal.getTime());
    }
    
    /**
     * 得到月所在的最后一天的日期
     * @param date
     * @return
     */
    public static String getMonthLastDay(String date){
    	 SimpleDateFormat format = new SimpleDateFormat(SHORT_PATTERN);
         Date d = null;
         try {
             d = format.parse(date);
         } catch(ParseException e) {
			 Log.d("TAG", "DateUtil -- getMonthLastDay format date error!");
         }
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(d);
         calendar.add(Calendar.MONTH, -1);
         
         calendar.add(Calendar.MONTH, 2);    //加2个月变成本月的下个月
         calendar.set(Calendar.DATE, 1);        //设置为该月第一天
         calendar.add(Calendar.DATE, -1);    //再减一天即为上个月最后一天
         return format.format(calendar.getTime());
    }

    
    /**
	 * 比较两个日期(年月型,格式为YYYYMM)之间相差月份
	 * @param dealMonth -开始年月
	 * @param alterMonth - 结束年月
	 * @return alterMonth-dealMonth相差的月数
	 */
	public static int calBetweenTwoMonth(String dealMonth, String alterMonth) {
		int length = 0;
		if ((dealMonth.length() != 6) || (alterMonth.length() != 6)) {
			// 比较年月字符串的长度不正确
			length = -1;
		} else {
			int dealInt = Integer.parseInt(dealMonth);
			int alterInt = Integer.parseInt(alterMonth);
			if (dealInt < alterInt) {
				// 第一个年月变量应大于或等于第二个年月变量
				length = -2;
			} else {
				int dealYearInt = Integer.parseInt(dealMonth.substring(0, 4));
				int dealMonthInt = Integer.parseInt(dealMonth.substring(4, 6));
				int alterYearInt = Integer.parseInt(alterMonth.substring(0, 4));
				int alterMonthInt = Integer.parseInt(alterMonth.substring(4, 6));
				length = (dealYearInt - alterYearInt) * 12+ (dealMonthInt - alterMonthInt);
			}
		}
		return length;
	}
	/**
	 * 得到两个日期之间相差的天数
	 * @param newDate 大的日期
	 * @param oldDate 小的日期
	 * @return newDate-oldDate相差的天数
	 */
	public static int daysBetweenDates(Date newDate, Date oldDate){
		int days = 0;
		Calendar calo = Calendar.getInstance();
		Calendar caln = Calendar.getInstance();
		calo.setTime(oldDate);
		caln.setTime(newDate);
		int oday = calo.get(Calendar.DAY_OF_YEAR);
		int nyear = caln.get(Calendar.YEAR);
		int oyear = calo.get(Calendar.YEAR);
		while (nyear > oyear){
			calo.set(Calendar.MONTH, 11);
			calo.set(Calendar.DATE, 31);
			days = days + calo.get(Calendar.DAY_OF_YEAR);
			oyear = oyear + 1;
			calo.set(Calendar.YEAR, oyear);
		}
		int nday = caln.get(Calendar.DAY_OF_YEAR);
		days = days + nday - oday;
		return days;
	}
	/**
	 * 取得与原日期相差一定天数的日期,返回Date型日期
	 * @param date 原日期
	 * @param intBetween 相差的天数
	 * @return date加上intBetween天后的日期
	 */
	public static Date getDateBetween(Date date, int intBetween){
		Calendar calo = Calendar.getInstance();
		calo.setTime(date);
		calo.add(Calendar.DATE, intBetween);
		return calo.getTime();
	}

	/**
	 * 获取上上个月第一天日期字符串
	 * @return 上上个月第一天日期字符串
	 */
	public static Date getPrePreMonthFirstDay(Date date) {
		Calendar lastDate = Calendar.getInstance();
        lastDate.setTime(date);
		lastDate.set(Calendar.DATE, 1);
		lastDate.add(Calendar.MONTH, -2);
		lastDate.set(Calendar.HOUR_OF_DAY, 0);
		lastDate.set(Calendar.MINUTE, 0);
		lastDate.set(Calendar.SECOND, 0);
		return new Date(lastDate.getTimeInMillis());
	}

    /**
     * 获取相差n个月的第一天的日期
     * @return
     */
    public static Date getPreSomeMonthFirstDay(Date date, int n) {
        Calendar lastDate = Calendar.getInstance();
        lastDate.setTime(date);
        lastDate.set(Calendar.DATE, 1);
        lastDate.add(Calendar.MONTH, n);
        lastDate.set(Calendar.HOUR_OF_DAY, 0);
        lastDate.set(Calendar.MINUTE, 0);
        lastDate.set(Calendar.SECOND, 0);
        return new Date(lastDate.getTimeInMillis());
    }

	/**
	 * 获取上上个月最后一天日期字符串
	 * @return 上上个月最后一天日期字符串
	 */
	public static Date getPrePreMonthLastDay(Date date) {
		Calendar lastDate = Calendar.getInstance();
        lastDate.setTime(date);
		lastDate.add(Calendar.MONTH, -2);
		lastDate.set(Calendar.DATE, 1);
		lastDate.roll(Calendar.DATE, -1);
		lastDate.set(Calendar.HOUR_OF_DAY, 23);
		lastDate.set(Calendar.MINUTE, 59);
		lastDate.set(Calendar.SECOND, 59);
		return new Date(lastDate.getTimeInMillis());
	}
	
	public static boolean isToday(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		Calendar n = Calendar.getInstance();
		if (c.get(Calendar.YEAR) == n.get(Calendar.YEAR)
				&& c.get(Calendar.MONTH) == n.get(Calendar.MONTH)
				&& c.get(Calendar.DAY_OF_MONTH) == n.get(Calendar.DAY_OF_MONTH)) {
			return true;
		}
		return false;
	}
	
	/**
	 * 清掉时间的小时、分、秒
	 * 
	 * @param d
	 * @return
	 */
	public static Date clearDate(Date d) {
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.MILLISECOND, 0);
		return c.getTime();
	}

    /**
     * 清掉时间的分、秒
     *
     * @param d
     * @return
     */
    public static Date clearMinute(Date d) {
        Calendar c = Calendar.getInstance();
        c.setTime(d);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        return c.getTime();
    }

    /**
     * 清掉时间的秒
     *
     * @param d
     * @return
     */
    public static Date clearSecond(Date d) {
        Calendar c = Calendar.getInstance();
        c.setTime(d);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        return c.getTime();
    }
	
	/**
	 * @description 获得一个比当前时间提前N小时的时间
	 * @author Yaojiawei
	 * @date 2014-08-27
	 * */
	public static Date getPreNDate(Date d, int N)
	{
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		c.set(Calendar.HOUR_OF_DAY, c.get(Calendar.HOUR_OF_DAY)-N);
		return new Date(c.getTimeInMillis());
	}
	
	/**
	 * @description 计算两个时间之间差多少分钟
	 * @author Yaojiawei
	 * @date 2014-08-27
	 * */
	public static int getMinBetweenTime(Date startTime, Date endTime)
	{
		long cha = endTime.getTime() - startTime.getTime();
		double result = new BigDecimal(cha).divide(new BigDecimal(1000 * 60 ), 1, BigDecimal.ROUND_DOWN).doubleValue();	
		return Integer.parseInt(String.format("%.0f", result));
	}
	
	/**
	 * @description 计算出比当前时间前N分钟的时间
	 * @author Yaojiawei
	 * @date 2014-08-29
	 * */
	public static Date getDateMinusMinute(Date d,int minute)
	{
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		c.add(Calendar.MINUTE,(0- minute));
		return c.getTime();
	}
	
	/**
	 * 取上个月并格式化
	 * 
	 * @return
	 */
	public static String getLastMonthFormat() {
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.MONTH, -1);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
		return sdf.format(cal.getTime());
	}
	
	/**
	 * 得到月的最后一天
	 * 
	 * @param d
	 * @return
	 */
	public static Date getMonthLastDay(Date d) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(d);

		calendar.add(Calendar.MONTH, 1);
		calendar.set(Calendar.DATE, 1);
		calendar.add(Calendar.DATE, -1);
		calendar.set(Calendar.HOUR_OF_DAY, 23);
		calendar.set(Calendar.MINUTE, 59);
		return calendar.getTime();
	}
	
	/**
	 * 获取当前年的年数
	 * 
	 * @return
	 */
	public static int getCurrentYear() {
		Calendar calendar = Calendar.getInstance();
		return calendar.get(Calendar.YEAR);
	}

    /**
     * 获取时间的年份、月份、日
     *
     * @return
     */
    public static int getYear(Date d) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.YEAR);
    }
    public static int getMonth(Date d) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.MONTH) + 1;
    }
    public static int getDay(Date d) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DATE);
    }
	
	/**
	 * 获取给定日期的calendar实例
	 * @param date 给定的日期
	 * @return
	 */
	private static Calendar getCalendar(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal;
	}
	
	/**
	 * 获取两时间之间相差月数
	 * @param beginTime 开始日期
	 * @param endTime   结束日期
	 * @return
	 */
	public static int getBetweenMonthes(Date beginTime, Date endTime) {
		Calendar cal1 = getCalendar(beginTime);
		Calendar cal2 = getCalendar(endTime);
		return (cal2.get(Calendar.YEAR) - cal1.get(Calendar.YEAR)) * 12 + cal2.get(Calendar.MONTH) - cal1.get(Calendar.MONTH);
	}
	
	/**
	 * 获取上个月最后一天日期字符串
	 * 
	 * @return 上个月最后一天日期
	 */
	public static Date getPreMonthLastDay(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		calendar.add(Calendar.DAY_OF_MONTH, -1);
		calendar.set(Calendar.HOUR_OF_DAY, 23);
		calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
		return calendar.getTime();
	}
	
	/**
	 * 得到月的天数
	 * 
	 * @param date
	 * @return
	 */
	public static int getMonthDays(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}
	
	public static String getLastMonth(Date d) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(d);
		cal.add(Calendar.MONTH, -1);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
		return sdf.format(cal.getTime());
	}

    /**
     * 得到日期的小时(12小时制)
     * @return
     */
    public static int getHourFor12(Date d){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.HOUR);
    }

    /**
     * 得到日期的小时(24小时制)
     * @return
     */
    public static int getHourFor24(Date d){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.HOUR_OF_DAY);
    }
    
	/**
	 * 判断日期是否是当前的月份
	 * 
	 * @param d
	 * @return
	 */
	public static boolean isCurrentMonth(Date d) {
		Calendar c1 = Calendar.getInstance();
		c1.setTime(d);
		Calendar c2 = Calendar.getInstance();

		if (c1.get(Calendar.MONTH) == c2.get(Calendar.MONTH))
			return true;

		return false;
	}
	
	/**
	 * 获得下个月第一天日期
	 * 
	 * @param d
	 * @return
	 */
	public static Date getNextMonthFirstDay(Date d) {
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		c.set(Calendar.DATE, 1);
		c.add(Calendar.MONTH, 1);
		c.set(Calendar.HOUR_OF_DAY, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.SECOND, 0);
		c.set(Calendar.MILLISECOND, 0);
		c.set(Calendar.MILLISECOND, 0);
		return c.getTime();
	}
	
	/**
	 * 给定一个日期和天数,获得这个相加后的日期
	 * 
	 * @param d
	 * @param iday
	 * @return
	 */
	public static Date addDateDay(Date d, int iday) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(d);
		cal.add(Calendar.DAY_OF_MONTH, iday);
		return cal.getTime();
	}
	
	/**
	 * 设置日的最后时间点
	 * @param d
	 * @return
	 */
	public static Date setDateEnd(Date d) {
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		c.set(Calendar.HOUR_OF_DAY, 23);
		c.set(Calendar.MINUTE, 59);
		c.set(Calendar.SECOND, 59);
		
		return c.getTime();
	}
	
	/**
	 * 设置到指定月份
	 * 
	 * @param month
	 * @return
	 */
	public static Date setDateMonth(int month) {
		Calendar c = Calendar.getInstance();
		c.set(Calendar.DAY_OF_MONTH, 1);
		c.set(Calendar.MONTH, month - 1);
		return c.getTime();
	}
	
	/**
	 * 获取日期的月份
	 * 
	 * @param d
	 * @return
	 */
	public static int getDateMonth(Date d) {
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		return (c.get(Calendar.MONTH) + 1);
	}
	
	/**
	 * 得到该日期所属的季度
	 * @param d
	 * @return
	 */
	public static int getQuartar(Date d){
		Calendar cal = Calendar.getInstance();
		cal.setTime(d);
	    int month = cal.get(Calendar.MONTH) + 1;
	    int quarter = 0;
	    if(month%3==0){
	    	quarter = month/3;
	    }else {
	    	quarter = month/3+1;
	    }
	    return quarter;
	}
	
	/**
	 * @description 计算出比当前时间前N秒钟的时间
	 * @author yaojiawei
	 * @date 2018-06-07
	 * @param second 秒
	 * @param d 日期
	 * @return Date
	 * */
	public static Date getDateMinusSeconde(Date d,int second)
	{
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		c.add(Calendar.SECOND,(0- second));
		return c.getTime();
	}
	
	
	/**
	 * 获取上个月最后一天日期字符串
	 * 只有日期,时,分,秒都是0的日期
	 * @return 上个月最后一天日期
	 */
	public static Date getPreMonthLastDay2(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		calendar.add(Calendar.DAY_OF_MONTH, -1);
//		calendar.set(Calendar.HOUR_OF_DAY, 00);
//		calendar.set(Calendar.MINUTE, 00);
//		calendar.set(Calendar.SECOND, 00);
		return calendar.getTime();
	}
	
}

CommonTool工具类

import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CommonTool {
    private static ExecutorService service3 = Executors.newFixedThreadPool(10);

    public static ExecutorService getThreadPool() {
        return service3;
    }

    public static String getLeftPadingStr(String str, int length, String def) {
        int need = length - str.length();
        if (need <= 0) {
            return str;
        }
        StringBuilder pre = new StringBuilder();
        for (int i = 0; i < need; i++) {
            pre.append(def);
        }
        return pre.toString() + str;
    }

    public static String reverseAddrStr(String str) {
        String temp = "";
        for (int i = 0; i < str.length(); i = i + 2) {
            temp = str.substring(i, i + 2) + temp;
        }
        return temp;
    }

    public static String convertStrToIP(String hexStr) {
        if (TextUtils.isEmpty(hexStr) || hexStr.length() != 8) {
            return "";
        }
        return Integer.parseInt(hexStr.substring(0, 2), 16) + "." + Integer.parseInt(hexStr.substring(2, 4), 16) + "." + Integer.parseInt(hexStr.substring(4, 6), 16) + "." + Integer.parseInt(hexStr.substring(6), 16);
    }

    private static int no = 1;

    public static synchronized Integer getIntKey() {
        return no++;
    }

    private static String formatStr2(String source) {
        if (source == null || source.length() == 0) {
            return "00";
        } else if (source.length() == 1) {
            return "0" + source;
        } else {
            return source.substring(source.length() - 2);
        }
    }

    // 是否存在SD卡
    private static boolean existSDCard() {
        return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
    }

    // 获取存储根目录
    private static String getRootStorage() {
        if (existSDCard()) {
            return Environment.getExternalStorageDirectory().getAbsolutePath();
        } else {
            return null;
        }
    }

    public static String getLyLogPath() {
        String PATH_LOGCAT = "";
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {// 优先保存到SD卡中
            PATH_LOGCAT = Environment.getExternalStorageDirectory()
                    .getAbsolutePath();
        } else {
            return null;
        }
        File root = new File(PATH_LOGCAT, "lylog");
        if (!root.exists()) {
            createFile(PATH_LOGCAT + File.separator + "lylog");
        }

        return PATH_LOGCAT + File.separator + "lylog";
    }

    public static String createFile(String filePath) {
        String returnValue = "";

        try {
            Runtime runtime = Runtime.getRuntime();
            String[] command = new String[]{"cmd", "\\C", "su", "0", "touch", filePath};
            Process p = runtime.exec(command);
            p.waitFor();
            java.io.BufferedReader errorIn = new java.io.BufferedReader(
                    new java.io.InputStreamReader(p.getErrorStream()));
            String line = "";
            while ((line = errorIn.readLine()) != null)
                returnValue += line + "\n";

        } catch (InterruptedException e) {
            Log.e("createFile",e.getMessage());
//            e.printStackTrace();
        } catch (IOException ex) {
            Log.e("createFile",ex.getMessage());
//            ex.printStackTrace();
        }
        return returnValue;
    }

    // 获取设施信息根目录
    public static String getExportDirPath() {
        if (existSDCard()) {
            File root = new File(getRootStorage(), "lyfile");
            if (!root.exists()) {
                root.mkdir();
            }

            return getRootStorage() + File.separator + "lyfile";
        }

        return null;
    }

    public static String getLyDBDirPath() {
        if (existSDCard()) {
            File root = new File(getRootStorage(), "lydb");
            if (!root.exists()) {
                root.mkdir();
            }

            return getRootStorage() + File.separator + "lydb";
        }

        return null;
    }

    public static String getLyLogDirPath() {
        if (existSDCard()) {
            File root = new File(getRootStorage(), "lylog");
            if (!root.exists()) {
                root.mkdir();
            }

            return getRootStorage() + File.separator + "lylog";
        }

        return null;
    }

    public static String trimLastChar(String source) {
        if (TextUtils.isEmpty(source)) {
            return "";
        }

        return source.substring(0, source.length() - 1);
    }

    public static String hexStringToString(String s) {
        if (s == null || s.equals("")) {
            return null;
        }
        s = s.replace(" ", "");
        byte[] baKeyword = new byte[s.length() / 2];
        for (int i = 0; i < baKeyword.length; i++) {
            try {
                baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
            } catch (Exception e) {
                LogManager.WriteErrLog( e.getMessage());
            }
        }
        try {
            s = new String(baKeyword);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return s;
    }

    public static byte[] hexStringToBytes(String s) {
        if (s == null || s.equals("")) {
            return null;
        }
        s = s.replace(" ", "");
        byte[] baKeyword = new byte[s.length() / 2];
        for (int i = 0; i < baKeyword.length; i++) {
            try {
                baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
            } catch (Exception e) {
                LogManager.WriteErrLog( e.getMessage());
            }
        }

        return baKeyword;
    }

    public static String bytesToHexString(byte[] src, int length) {
        StringBuilder builder = new StringBuilder();
        if (src == null || length <= 0) {
            return null;
        }
        String hv;
        for (int i = 0; i < length; i++) {
            // 以⼗六进制(基数 16)⽆符号整数形式返回⼀个整数参数的字符串表⽰形式,并转换为⼤写
            hv = Integer.toHexString(src[i] & 0xFF).toUpperCase();
            if (hv.length() < 2) {
                builder.append(0);
            }
            builder.append(hv);
        }
        return builder.toString();
    }

    public static int getMaxNumber(List<Integer> datas) {
        int result = 0;
        if (datas == null || datas.size() <= 0) {
            return result;
        }
        for (Integer data : datas) {
            if (data > result) {
                result = data;
            }
        }

        return result;
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值