在项目开发中经常会用到时间,对时间的操作最常见的就是识别出是哪一天,是今天,还是昨天,甚至是星期几!
我这里有一篇工具类,提供给大家,希望能给大家带来帮助!!
package com.dash.a09_alipay; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; /** * Created by zzt on 2018/5/2. */ public class DataUtils { /** * 判断给定字符串时间是否为今日(效率不是很高,不过也是一种方法) * @param sdate * @return boolean */ public static boolean isToday(String sdate){ boolean b = false; Date time = toDate(sdate); Date today = new Date(); if(time != null){ String nowDate = dateFormater2.get().format(today); String timeDate = dateFormater2.get().format(time); if(nowDate.equals(timeDate)){ b = true; } } return b; } /** * 将字符串转位日期类型 * @param sdate * @return */ public static Date toDate(String sdate) { try { return dateFormater.get().parse(sdate); } catch (Exception e) { return null; } } private final static ThreadLocal<SimpleDateFormat> dateFormater = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }; private final static ThreadLocal<SimpleDateFormat> dateFormater2 = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd"); } }; private static ThreadLocal<SimpleDateFormat> DateLocal = new ThreadLocal<SimpleDateFormat>(); /** * 判断是否为今天(效率比较高) * @param day 传入的 时间 "2016-06-28 10:10:30" "2016-06-28" 都可以 * @return true今天 false不是 * @throws Exception */ public static boolean IsToday(String day) { Calendar pre = Calendar.getInstance(); Date predate = new Date(System.currentTimeMillis()); pre.setTime(predate); Calendar cal = Calendar.getInstance(); Date date = null; try { date = getDateFormat().parse(day); cal.setTime(date); if (cal.get(Calendar.YEAR) == (pre.get(Calendar.YEAR))) { int diffDay = cal.get(Calendar.DAY_OF_YEAR) - pre.get(Calendar.DAY_OF_YEAR); if (diffDay == 0) { return true; } } } catch (Exception e) { e.printStackTrace(); } return false; } /** * 判断是否为昨天(效率比较高) * @param day 传入的 时间 "2016-06-28 10:10:30" "2016-06-28" 都可以 * @return true今天 false不是 * @throws Exception */ public static boolean IsYesterday(String day) { Calendar pre = Calendar.getInstance(); Date predate = new Date(System.currentTimeMillis()); pre.setTime(predate); Calendar cal = Calendar.getInstance(); Date date = null; try { date = getDateFormat().parse(day); cal.setTime(date); if (cal.get(Calendar.YEAR) == (pre.get(Calendar.YEAR))) { int diffDay = cal.get(Calendar.DAY_OF_YEAR) - pre.get(Calendar.DAY_OF_YEAR); if (diffDay == -1) { return true; } } } catch (Exception e) { e.printStackTrace(); } return false; } public static SimpleDateFormat getDateFormat() { if (null == DateLocal.get()) { DateLocal.set(new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA)); } return DateLocal.get(); } }
以上就是识别时间的工具类,这个工具类中只是做了识别是昨天还是今天!!如果有更全面,希望可以留言,分享!共同进步嘛!!
一下是我再Activity中的运用:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); timetext = (TextView) findViewById(R.id.time); Date date = new Date(System.currentTimeMillis()); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = simpleDateFormat.format(date); format="2018-04-01 15:23:20"; if(DataUtils.isToday(format)){ Date date1 = DataUtils.toDate(format); SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("HH:mm:ss"); String format1 = simpleDateFormat1.format(date1); timetext.setText(format1); }else{ if(DataUtils.IsYesterday(format)){ timetext.setText("昨天"); }else{ timetext.setText(format); } } }效果图,这里就不展示了,太简单了,没意思!!