日期相关处理工具
1.获取当前日期字符串
如:2019-10-12
public static String getCurrentDateStr() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = new Date();
String nowStr = sdf.format(d);
return nowStr;
}
2.获取从今天算起的30天内的日期集合
如:2019-10-12、2019-10-13、2019-10-14、...2019-11-11
public static List getDateInfoList() {
SimpleDateFormat YEAR = new SimpleDateFormat("yyyy-MM-dd");
ArrayList dateInfos = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
String year = YEAR.format(calendar.getTime());
for (int i = 0; i < column; i++) {
String year = YEAR.format(calendar.getTime());
dateInfos.add(year);
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
return dateInfos;
}
3.获取从前一天算起的30天内的日期集合
如:2019-10-11、2019-10-12、2019-10-13、2019-10-14、...2019-11-11 以此类推可向前推可向后加
public static List getDateInfoList() {
ArrayList dateInfos = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1);
for (int i = 0; i < column; i++) {
String year = YEAR.format(calendar.getTime());
dateInfos.add(year);
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
return dateInfos;
}
4.判断某一个时间是否在一个时间段内
如:10:00 是否在10:00-20:00这个时间段范围内
/**
* 判断某一时间是否在一个区间内
*
* @param sourceTime 时间区间,半闭合,如[10:00-20:00)
* @param curTime 需要判断的时间 如10:00
* @return
* @throws IllegalArgumentException
*/
public static boolean isInTime(String sourceTime, String curTime) {
if (sourceTime == null || !sourceTime.contains("-") || !sourceTime.contains(":")) {
throw new IllegalArgumentException("Illegal Argument arg:" + sourceTime);
}
if (curTime == null || !curTime.contains(":")) {
throw new IllegalArgumentException("Illegal Argument arg:" + curTime);
}
String[] args = sourceTime.split("-");
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
try {
long now = sdf.parse(curTime).getTime();
long start = sdf.parse(args[0]).getTime();
long end = sdf.parse(args[1]).getTime();
if (args[1].equals("00:00")) {
args[1] = "24:00";
}
if (end < start) {
if (now >= end && now < start) {
return false;
} else {
return true;
}
} else {
if (now >= start && now < end) {
return true;
} else {
return false;
}
}
} catch (ParseException e) {
e.printStackTrace();
throw new IllegalArgumentException("Illegal Argument arg:" + sourceTime);
}
}
5.将某一个时间往后增加一天
如:今天2019-10-12,返回2019-10-13时间字符串
public static String getAfterDate(String dateGiven) throws Exception {
Date date = formatter.parse(dateGiven);
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(calendar.DATE, -1);//把日期往后增加一天.整数往后推,负数往前移动
date = calendar.getTime(); //这个时间就是日期往后推一天的结果
String dateString = formatter.format(date);
return dateString;
}
6.日期字符串转为毫秒值
如:2019-10-12返回456478964
public static long dateToTimestamp(String time) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = simpleDateFormat.parse(time);
long ts = date.getTime() / 1000;
return ts;
} catch (ParseException e) {
return 0;
}
}
7.毫秒值转日期
如:456478964返回2019-10-12
public static String timestampToDate(long time) {
if (time < 10000000000L) {
time = time * 1000;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sd = sdf.format(new Date(Long.parseLong(String.valueOf(time))));
return sd;
}
8.传入两个时间字符串得到时间字符串集合
如:传入2019-10-12,2019-10-16
返回:2019-10-12、2019-10-13、2019-10-14、2019-10-15、2019-10-16
public static List addDates(String cntDateBeg, String cntDateEnd) {
List list = new ArrayList<>();
//拆分成数组
String[] dateBegs = cntDateBeg.split("-");
String[] dateEnds = cntDateEnd.split("-");
//开始时间转换成时间戳
Calendar start = Calendar.getInstance();
start.set(Integer.valueOf(dateBegs[0]), Integer.valueOf(dateBegs[1]) - 1, Integer.valueOf(dateBegs[2]));
Long startTIme = start.getTimeInMillis();
//结束时间转换成时间戳
Calendar end = Calendar.getInstance();
end.set(Integer.valueOf(dateEnds[0]), Integer.valueOf(dateEnds[1]) - 1, Integer.valueOf(dateEnds[2]));
Long endTime = end.getTimeInMillis();
//定义一个一天的时间戳时长
Long oneDay = 1000 * 60 * 60 * 24l;
Long time = startTIme;
//循环得出
while (time <= endTime) {
list.add(new SimpleDateFormat("yyyy-MM-dd").format(new Date(time)));
time += oneDay;
}
return list;
}
9.比较日期字符串大小,按日期大小顺序排列
如:传参2019-10-12、2019-10-11,、2019-10-15集合
返回:2019-10-11、2019-10-12、2019-10-15
private List compareDates(List datelists) {
Collections.sort(datelists, new Comparator() {
@Override
public int compare(String h1, String h2) {
return h1.compareTo(h2);
}
});
return datelists;
}
10. 判断某一个日期是否大于当前日期
例如:比较两个日期大小2019-7-20 12:12:12 和2019-7-20 10:10:10大小
/**
* @param dateStr 结果返回是1 预订入住日期大于当前日期
* @return
*/
public static int compareDate(String dateStr) {
Date currentTime = new Date();
//改变输出格式(自己想要的格式)
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//得到字符串时间
String s8 = df.format(currentTime);
try {
Date dt1 = df.parse(dateStr);
Date dt2 = df.parse(s8);
if (dt1.getTime() > dt2.getTime()) {
System.out.println("dt1 在dt2前");
System.out.println("dt1在dt2后");
return 1;
}
} catch (Exception exception) {
exception.printStackTrace();
}
return 0;
}
注意事项
在格式化时间字符串时候
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");中如果"yyyy-MM-dd"替换成"YYYY-MM-dd"在android5.0的部分机型会报错