package com.lean56.andplug.utils; import android.text.format.DateUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; import static android.text.format.DateUtils.*; /** * Utilities for dealing with dates and times * * @author Charles */ public class TimeUtils { private final static String DEFAULT_SDF = "MM月dd日"; public static CharSequence formatString(String dateStr) { return formatString(dateStr, DEFAULT_SDF); } public static CharSequence formatLong(long millis) { return formatDate(new Date(millis), DEFAULT_SDF); } public static CharSequence formatDate(Date date) { return formatDate(date, DEFAULT_SDF); } public static CharSequence formatString(String dateStr, String sdfStr) { Date date = strToDate(dateStr); if (null != date) { return formatDate(date, sdfStr); } else { return ""; } } public static CharSequence formatDate(Date date, String format) { SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.CHINA); return formatDate(date, sdf); } public static CharSequence formatDate(Date date, SimpleDateFormat sdf) { try { return sdf.format(date); } catch (NullPointerException npe) { return null; } } public static Date strToDate(String dateStr) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.parse(dateStr); } catch (ParseException e) { return null; } catch (NullPointerException npe) { return null; } } public static long getMondayInMillis(long time) { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(time); //判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了 int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天 if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } cal.setFirstDayOfWeek(Calendar.MONDAY);//设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 int day = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天 cal.add(Calendar.DATE, cal.getFirstDayOfWeek()-day);//根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTimeInMillis(); } /** * Get relative time for date * * @param date * @return relative time */ public static CharSequence getRelativeTime(final Date date) { return getRelativeTime(date.getTime()); } public static CharSequence getRelativeTime(long millis) { return DateUtils.getRelativeTimeSpanString(millis, System.currentTimeMillis(), SECOND_IN_MILLIS, FORMAT_SHOW_DATE | FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE); } }