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
;
}
转载请注明原文地址: https://lol.8miu.com/read-35168.html