java-Date相关类库
个人开发中积累的关于时间日期等一些工具类,方便使用
- 注意
-
- Calendar的set方法
Calendar c = Calendar.getInstance();
c.setTime(init);
int month = c.get(Calendar.MONTH);
// 上次统计两月前开始统计
c.set(Calendar.MONTH, month - 1); // month - 1 就是相对month月份的 -前,+后 的月份。
1. 按天统计数据
指定一个时间,到当前时间,一次输出每天时间
public static void main(String[] args) throws ParseException {
Calendar c1 = Calendar.getInstance();
Date date = null;
date = new Date();
c1.setTime(date);
int day = c1.get(Calendar.DATE);
String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c1.getTime());
// di为当前日期的前一天
Date di = new SimpleDateFormat("yy-MM-dd").parse(dayBefore);
// 兜底时间 或者 最小时间
Date calTime = null;
String tir = "2018-09-06";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 换为 Date类型
Date date1 = sdf.parse(tir);
// 转为 Calendar类型
Calendar c = Calendar.getInstance();
c.setTime(date1);
String a = "";
for (int i = 0; i < 10000; i++) {
int day1 = c.get(Calendar.DATE);
calTime = c.getTime();
if (calTime.before(di)) {
c.setTime(calTime);
// begin
a = sdf.format(c.getTime());
System.out.print(a + "-");
// end
Date date2 = sdf.parse(a);
// 转为 Calendar类型
Calendar c2 = Calendar.getInstance();
int day2 = c.get(Calendar.DATE);
// 上次统计两天前开始统计
c2.set(Calendar.DATE, day1 + 1);
System.out.println(sdf.format(c2.getTime()));
// 执行a时段的统计
}
c.set(Calendar.DATE, day1 + 1);
}
}
输出如下:
1. 按月
指定一个时间,步进1月 , 到当前时间
public static void main(String[] args) throws ParseException {
// 月份需要注意,日历的月份比中国的实际月份小
Calendar c_now = Calendar.getInstance();
Date date = null;
date = new Date();
c_now.setTime(date);
int month = c_now.get(Calendar.MONTH);
c_now.set(Calendar.MONTH, month);
String nowTime = new SimpleDateFormat("yyyy-MM").format(c_now.getTime());
System.out.println(nowTime);
// di为当前日期的前一天
Date d_now = new SimpleDateFormat("yy-MM").parse(nowTime);
// 兜底时间 或者 最小时间
Date calTime = null;
String tir = "2018-09";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
// 换为 Date类型
Date calcDate = sdf.parse(tir);
// 转为 Calendar类型
Calendar c_start = Calendar.getInstance();
c_start.setTime(calcDate);
// c_calc.set(Calendar.MONTH, c_calc.get(Calendar.MONTH) + 1); 上边已经设定 ,这里不用再加1
String ststicStart = "";
String ststicEnd = "";
Calendar c_end = null;
for (int i = 0; i < 10000; i++) {
calTime = c_start.getTime();
if (calTime.before(d_now)) {
// c_calc.setTime(calTime);
// begin
ststicStart = sdf.format(c_start.getTime());
System.out.print(ststicStart + "->");
c_end = c_start;
int monthMore = c_end.get(Calendar.MONTH);
// 上次统计两天前开始统计
c_end.set(Calendar.MONTH, monthMore + 1);
// end
ststicEnd = sdf.format(c_end.getTime());
System.out.println(ststicEnd);
}
c_start = c_end;
}
}
3. 获取上个月的第一天和最后一天
public static void main(String[] args) throws ParseException {
Map<String, Date> paramDate = new HashMap<String, Date>();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 获取当前日期
Calendar calFirst = Calendar.getInstance();
// 1. 得到上个月的第一天
calFirst.add(Calendar.MONTH, -1);
// 设置为1号,当前日期既为本月第一天
calFirst.set(Calendar.DAY_OF_MONTH, 1);
String firstDay = format.format(calFirst.getTime());
Date frontMonthFirst = format.parse(firstDay);
System.out.println("-----1------firstDay:" + firstDay + " ---" + frontMonthFirst);
paramDate.put("first", frontMonthFirst);
// 2.获取上个月的最后一天
Calendar calEnd = Calendar.getInstance();
// 设置为1号,当前日期既为本月第一天
calEnd.set(Calendar.DAY_OF_MONTH, 0);
String endDay = format.format(calEnd.getTime());
Date frontMonthEnd = format.parse(endDay);
System.out.println("-----1------endDay:" + endDay + " ---" + frontMonthEnd);
paramDate.put("end", frontMonthEnd);
// return paramDate;
}
4. 给一个list集合返回最大的日期
/**
*
* @param executeQuery
* Date的数组
* @return 返回一个最大的日期
* @throws ParseException
*/
public Date compareTime(List<String> dateList) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date ini = sdf.parse(dateList.get(0));
for (int i = 0; i < dateList.size(); i++) {
if (ini.before(sdf.parse(dateList.get(i)))) {
ini = sdf.parse(dateList.get(i));
}
}
//返回list集合中最大的日期
return ini;
}