1、自然周、月、季度
1.1、调用自然周 、月、季度 方法
import java.text.SimpleDateFormat;
import java.util.*;
private Map<String,Object> naturalPeriod(Date start_time,Date end_time,String period){
SimpleDateFormat sdf_s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long start_m = 0;
long end_m = 0;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
start_m = sdf_s.parse(sdf.format(start_time)+" 00:00:00").getTime();
end_m = sdf_s.parse(sdf.format(end_time)+" 00:00:00").getTime();
} catch (ParseException e) {
logger.error("时间转换异常=={}",e.getMessage());
start_m = new Date().getTime();
end_m = new Date().getTime();
}
Map<String,Object> result = new HashMap<String, Object>();
if(end_m - start_m < 0){
result.put("state",false);
return result;
}
List<Map<String,Date>> list = new ArrayList<Map<String, Date>>();
if("1".equals(period)){
list.addAll(this.period(start_m, end_m));
}else if("2".equals(period)){
list.addAll(this.month(start_m, end_m));
}else if("3".equals(period)){
list.addAll(this.quarter(start_m, end_m));
}
result.put("state",true);
result.put("date",list);
return result;
}
1.2、自然周
import java.text.SimpleDateFormat;
import java.util.*;
private List<Map<String,Date>> period(long start_m,long end_m){
List<Map<String,Date>> list = new ArrayList<Map<String, Date>>();
Date start_date = new Date();
Date end_date = new Date();
if(end_m == start_m){
Map<String,Date> w_map = new HashMap<String, Date>();
start_date = new Date();
end_date = new Date();
start_date.setTime(start_m);
w_map.put("start_time",start_date);
end_date.setTime(end_m);
w_map.put("end_time",end_date);
list.add(w_map);
return list;
}
long one_day = 24*60*60*1000;
Calendar start = Calendar.getInstance();
start.setTimeInMillis(start_m);
int start_w = start.get(Calendar.DAY_OF_WEEK);
long start_end_w = 0;
if(start_w == 1){
start_end_w = start_m;
}else if(start_w == 2){
start_end_w = start_m + (6*one_day);
}else if(start_w == 3){
start_end_w = start_m + (5*one_day);
}else if(start_w == 4){
start_end_w = start_m + (4*one_day);
}else if(start_w == 5){
start_end_w = start_m + (3*one_day);
}else if(start_w == 6){
start_end_w = start_m + (2*one_day);
}else if(start_w == 7){
start_end_w = start_m + one_day;
}
Map<String,Date> start_w_map = new HashMap<String, Date>();
start_date = new Date();
end_date = new Date();
if(start_end_w == end_m){
start_date.setTime(start_m);
start_w_map.put("start_time",start_date);
end_date.setTime(start_end_w);
start_w_map.put("end_time",end_date);
list.add(start_w_map);
return list;
}else if(start_end_w > end_m){
start_date.setTime(start_m);
start_w_map.put("start_time",start_date);
end_date.setTime(end_m);
start_w_map.put("end_time",end_date);
list.add(start_w_map);
return list;
}else {
start_date.setTime(start_m);
start_w_map.put("start_time", start_date);
end_date.setTime(start_end_w);
start_w_map.put("end_time", end_date);
list.add(start_w_map);
}
Calendar end = Calendar.getInstance();
end.setTimeInMillis(end_m);
int end_w = end.get(Calendar.DAY_OF_WEEK);
long end_start_w = 0;
if(end_w == 1){
end_start_w = end_m - (6*one_day);
}else if(end_w == 2){
end_start_w = end_m;
}else if(end_w == 3){
end_start_w = end_m - (one_day);
}else if(end_w == 4){
end_start_w = end_m - (2*one_day);
}else if(end_w == 5){
end_start_w = end_m - (3*one_day);
}else if(end_w == 6){
end_start_w = end_m - (4*one_day);
}else if(end_w == 7){
end_start_w = end_m - (5*one_day);
}
if(end_start_w-start_end_w+one_day > 0 ){
long day = 0;
if((end_start_w-one_day-start_end_w)%one_day == 0){
day = (end_start_w-one_day-start_end_w)/one_day;
}else{
day = (end_start_w-one_day-start_end_w)/one_day+1;
}
long period_day = day/7;
long s_time = 0;
long next_time = 0;
for(long i = 0;i<period_day;i++){
Map<String,Date> map = new HashMap<String, Date>();
if(i == 0){
s_time = start_end_w+one_day;
}else{
s_time = next_time + one_day;
}
next_time = s_time + (6*one_day);
if(i == period_day -1){
next_time = end_start_w-one_day;
}
start_date = new Date();
end_date = new Date();
start_date.setTime(s_time);
map.put("start_time",start_date);
end_date.setTime(next_time);
map.put("end_time",end_date);
list.add(map);
}
}
Map<String,Date> end_w_map = new HashMap<String, Date>();
start_date = new Date();
end_date = new Date();
start_date.setTime(end_start_w);
end_w_map.put("start_time",start_date);
end_date.setTime(end_m);
end_w_map.put("end_time",end_date);
list.add(end_w_map);
return list;
}
1.3、自然月
private List<Map<String,Date>> month(long start_m,long end_m){
List<Map<String,Date>> list = new ArrayList<Map<String, Date>>();
Date start_date;
Date end_date;
Map<String,Date> m_map ;
long one_day = 24*60*60*1000;
Calendar c_start = Calendar.getInstance();
c_start.setTimeInMillis(start_m);
Calendar c_end = Calendar.getInstance();
c_end.setTimeInMillis(end_m);
int result = c_end.get(Calendar.MONTH) - c_start.get(Calendar.MONTH);
int month = (c_end.get(Calendar.YEAR) - c_start.get(Calendar.YEAR)) * 12;
int abs = Math.abs(month + result);
if(abs == 0 ){
m_map = new HashMap<String, Date>();
start_date = new Date();
end_date = new Date();
start_date.setTime(start_m);
m_map.put("start_time",start_date);
end_date.setTime(end_m);
m_map.put("end_time",end_date);
list.add(m_map);
return list;
}
long max_day_m = 0;
for(int i = 0;i<=abs;i++){
m_map = new HashMap<String, Date>();
start_date = new Date();
end_date = new Date();
long day_m = 0;
if(i == 0){
start_date.setTime(start_m);
m_map.put("start_time", start_date);
day_m = start_m;
} else{
day_m = max_day_m + one_day;
start_date.setTime(day_m);
m_map.put("start_time", start_date);
}
if(i == abs){
end_date.setTime(end_m);
m_map.put("end_time",end_date);
}else {
Calendar next_end = Calendar.getInstance();
next_end.setTimeInMillis(day_m);
next_end.set(Calendar.DAY_OF_MONTH, next_end.getActualMaximum(Calendar.DAY_OF_MONTH));
max_day_m = next_end.getTime().getTime();
end_date.setTime(max_day_m);
m_map.put("end_time",end_date);
}
list.add(m_map);
}
return list;
}
1.4、自然季度
private List<Map<String,Date>> quarter(long start_m,long end_m){
List<Map<String,Date>> list = new ArrayList<Map<String, Date>>();
Date start_date;
Date end_date;
Map<String,Date> q_map ;
long one_day = 24*60*60*1000;
long startQuarterStartTime = this.getQuarterStartTime(start_m);
long startQuarterEndTime = this.getQuarterEndTime(start_m);
long endQuarterStartTime = this.getQuarterStartTime(end_m);
long endQuarterEndTime = this.getQuarterEndTime(end_m);
if(startQuarterStartTime == endQuarterStartTime && startQuarterEndTime == endQuarterEndTime){
q_map = new HashMap<String, Date>();
start_date = new Date();
end_date = new Date();
start_date.setTime(start_m);
q_map.put("start_time",start_date);
end_date.setTime(end_m);
q_map.put("end_time",end_date);
list.add(q_map);
return list;
}
Calendar c_start = Calendar.getInstance();
c_start.setTimeInMillis(startQuarterEndTime);
Calendar c_end = Calendar.getInstance();
c_end.setTimeInMillis(endQuarterStartTime);
int result = c_end.get(Calendar.MONTH) - c_start.get(Calendar.MONTH);
int month = (c_end.get(Calendar.YEAR) - c_start.get(Calendar.YEAR)) * 12;
int abs = Math.abs(month + result);
if(abs%3==0){
abs = abs/3;
}else{
abs = abs/3+1;
}
long nextQuarterStart = 0;
for(int i = 0;i<=abs;i++){
q_map = new HashMap<String, Date>();
if(i == 0){
start_date = new Date();
end_date = new Date();
start_date.setTime(start_m);
q_map.put("start_time",start_date);
end_date.setTime(startQuarterEndTime);
q_map.put("end_time",end_date);
list.add(q_map);
nextQuarterStart = startQuarterEndTime+one_day;
}else if(i == abs){
start_date = new Date();
end_date = new Date();
start_date.setTime(endQuarterStartTime);
q_map.put("start_time",start_date);
end_date.setTime(end_m);
q_map.put("end_time",end_date);
list.add(q_map);
}else{
start_date = new Date();
end_date = new Date();
start_date.setTime(nextQuarterStart);
q_map.put("start_time",start_date);
long nextQuarterEndTime = this.getQuarterEndTime(nextQuarterStart);
end_date.setTime(nextQuarterEndTime);
q_map.put("end_time",end_date);
list.add(q_map);
nextQuarterStart = nextQuarterEndTime + one_day;
}
}
return list;
}
public long getQuarterStartTime(long time) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();
c.setTimeInMillis(time);
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = null;
try {
if (currentMonth >= 1 && currentMonth <= 3) {
c.set(Calendar.MONTH, 0);
}else if (currentMonth >= 4 && currentMonth <= 6){
c.set(Calendar.MONTH, 3);
}else if (currentMonth >= 7 && currentMonth <= 9){
c.set(Calendar.MONTH, 6);
} else if (currentMonth >= 10 && currentMonth <= 12) {
c.set(Calendar.MONTH, 9);
}
c.set(Calendar.DATE, 1);
now = sdf1.parse(sdf.format(c.getTime()) + " 00:00:00");
} catch (Exception e) {
e.printStackTrace();
}
return now.getTime();
}
public long getQuarterEndTime(long start_m) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();
c.setTimeInMillis(start_m);
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = null;
try {
if (currentMonth >= 1 && currentMonth <= 3) {
c.set(Calendar.MONTH, 2);
} else if (currentMonth >= 4 && currentMonth <= 6) {
c.set(Calendar.MONTH, 5);
} else if (currentMonth >= 7 && currentMonth <= 9) {
c.set(Calendar.MONTH, 8);
} else if (currentMonth >= 10 && currentMonth <= 12) {
c.set(Calendar.MONTH, 11);
}
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
now = sdf1.parse(sdf.format(c.getTime()) + " 00:00:00");
} catch (Exception e) {
e.printStackTrace();
}
return now.getTime();
}
2、固定周、月、季度
private Map<String,Object> fixationPeriod(Date start_time,Date end_time,String period){
Map<String,Object> result = new HashMap<String, Object>();
SimpleDateFormat sdf_s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long one_day = 24*60*60*1000;
long start = 0;
long end = 0;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
start = sdf_s.parse(sdf.format(start_time)+" 00:00:00").getTime();
end = sdf_s.parse(sdf.format(end_time)+" 00:00:00").getTime();
} catch (ParseException e) {
logger.error("时间转换异常=={}",e.getMessage());
start = new Date().getTime();
end = new Date().getTime();
}
long day = 0;
if((end - start)%one_day == 0){
day = (end - start)/one_day;
}else{
day = (end - start)/one_day+1;
}
List<Map<String,Date>> list = new ArrayList<Map<String, Date>>();
long period_day = 0;
long interval_day = 0;
if("1".equals(period)){
interval_day = 6;
if(day < 7){
result.put("status",false);
return result;
}
if(day%7==0){
period_day = day/7;
}else{
period_day = day/7 +1 ;
}
}else if("2".equals(period)){
interval_day = 29;
if(day >= 30){
if(day%30==0){
period_day = day/30;
}else{
period_day = day/30 +1 ;
}
}
}else if("3".equals(period)){
interval_day = 89;
if(day >= 90){
if(day%90==0){
period_day = day/90;
}else{
period_day = day/90 +1 ;
}
}
}
long s_time = 0;
long next_time = 0;
for(long i = 0;i<period_day;i++){
Map<String,Date> map = new HashMap<String, Date>();
if(i == 0){
s_time = start;
}else{
s_time = next_time + one_day;
}
next_time = s_time + (interval_day*one_day);
if(i == period_day -1){
next_time = end;
}
Date sd = new Date();
sd.setTime(s_time);
map.put("start_time",sd);
Date ed = new Date();
ed.setTime(next_time);
map.put("end_time",ed);
list.add(map);
}
result.put("state",true);
result.put("date",list);
return result;
}