package com.yogapay.moffice;
import org.apache.commons.lang3.StringUtils;
import static org.apache.commons.lang3.time.DateFormatUtils.ISO_8601_EXTENDED_DATE_FORMAT;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.time.DateUtils;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import com.qj.core.util.StringUtil;
public class DateTool{
public static final BigDecimal NUMBER_100 = new BigDecimal(100);
@Autowired
private static ObjectMapper mapper=new ObjectMapper();
public static long getDaySub(String beginDateStr,String endDateStr){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
long day=0;
try {
Date beginDate= format.parse(beginDateStr);
Date endDate= format.parse(endDateStr);
day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000);
} catch (ParseException e) {
e.printStackTrace();
}
return day;
}
/**
* 初始化条件查询时间:默认选中时间上月当日至本日
* @param param
*/
public static void initDate(Map
Date end=new Date();
Calendar calendar=Calendar.getInstance();
calendar.setTime(end);
calendar.add(Calendar.MONTH, -1);
Date start = calendar.getTime();
if(param.get(startDate)==null){
param.put(startDate,ISO_8601_EXTENDED_DATE_FORMAT.format(start));
}
if(param.get(endDate)==null){
param.put(endDate, ISO_8601_EXTENDED_DATE_FORMAT.format(end));
}
}
public static Date getLastDay(Date date,int index){
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, index);
return calendar.getTime();
}
public static Date getLastMonth(Date date,int index){
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, index);
return calendar.getTime();
}
public static Date getLastYear(Date date,int index){
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, index);
return calendar.getTime();
}
public static Date getDayOfMonth(Date date,int index){
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, index);
return calendar.getTime();
}
public static int getMonth(Date date){
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MONTH)+1;
}
public static int getDay(Date date){
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DATE);
}
public static int getYear(Date date){
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
public static int daysOfMonth(Date date) {
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
return calendar.get(Calendar.DAY_OF_MONTH);
}
public static String formatTime(int time) {
int hour = 0;
int minute = 0;
int second = 0;
hour = time / (60 * 60);
minute = (time - 60 * 60 * hour) / 60;
second = time - 60 * 60 * hour - 60 * minute;
return String.format("%02d:%02d:%02d", hour, minute, second);
}
public static String formatLongTime(long _time) {
int hour = 0;
int minute = 0;
int second = 0;
hour = (int) _time / (60 * 60);
minute = (int) (_time - 60 * 60 * hour) / 60;
second = (int) _time - (60 * 60 * hour) - minute * 60;
return String.format("%02d:%02d:%02d", hour, minute, second);
}
public static Date stringToDate(String strDate,String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
return sdf.parse(strDate);
} catch (Exception e) {
return null;
}
}
public static String getMinusDayEndDate(Date _date) {
Calendar calendar=Calendar.getInstance();
calendar.setTime(_date);
calendar.add(Calendar.DATE, -1);
return getStartData(calendar.getTime());
}
public static String dateToString(Date date, String pattern) {
if (date == null) {
return null;
}
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(pattern);
return sdf.format(date);
}
public static String readFileAsString(File file) {
StringBuilder sb = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String temp = null;
while ((temp = br.readLine()) != null) {
sb.append(temp);
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
/**
* 获取工作日、周六、周日、节假日
* @return
*/
public static LinkedHashMap
List
List
List
List
List
int endMonth=Integer.valueOf(endDate.substring(5,7));
int startMonth=Integer.valueOf(startDate.substring(5,7));
String year=endDate.substring(0,4);
for(int i=startMonth;i<=endMonth;i++){
Map
Object holiDays=data.get("holiDays");
Object workWeekDays=data.get("weekDays");
if(workWeekDays!=null){
workWeekDay.addAll((Set
}
if(holiDays!=null){
holiday.addAll((Set
}
}
//获取所有周六周末,减掉调休的日期,减掉节假日可能包含周末周六
//周六:6
saturday=getBetweenDate(startDate, endDate, true, 6);
if(!saturday.isEmpty()) saturday.removeAll(workWeekDay);saturday.removeAll(holiday);
//周末:0
weekend=getBetweenDate(startDate, endDate, true, 0);
if(!weekend.isEmpty()) weekend.removeAll(workWeekDay);weekend.removeAll(holiday);
//获取所有日期,减掉周六周末、节假日
workDays=getBetweenDate(startDate, endDate, false, -1);
workDays.removeAll(saturday);
workDays.removeAll(weekend);
workDays.removeAll(holiday);
//
LinkedHashMap
all.put("workDays", workDays);
all.put("saturday", saturday);
all.put("weekend", weekend);
all.put("holiday", holiday);
return all;
}
/**
* 获取两个日期之间的集合
*/
public static List
// 声明保存日期集合
List
// 转化成日期类型
Date startDate = stringToDate(startTime, "yyyy-MM-dd");
Date endDate = stringToDate(endTime, "yyyy-MM-dd");
//用Calendar 进行日期比较判断
Calendar calendar = Calendar.getInstance();
while (startDate.getTime()<=endDate.getTime()){
// 设置日期
calendar.setTime(startDate);
// 把日期添加到集合
if(isWeekday){//计算周末周六
int week=calendar.get(Calendar.DAY_OF_WEEK) - 1;
if(week==weekType){//0为周日,6为周六
list.add(dateToString(startDate, "yyyy-MM-dd"));
}
}else{
list.add(dateToString(startDate, "yyyy-MM-dd"));
}
//把日期增加一天
calendar.add(Calendar.DATE, 1);
// 获取增加后的日期
startDate=calendar.getTime();
}
return list;
}
/**
* 百度接口根据日期查询某月节假日期和周末调用日期
* @param endDate
* @param month yyyy-MM
* @return
*/
public static Map
Set
Set
Date now=stringToDate(endDate, "yyyy-MM-dd");
int nowMonth=Integer.valueOf(month.substring(5));
String strUrl="http://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query="+month+"&co=&resource_id=6018";
BufferedReader reader = null;
StringBuffer sbf = new StringBuffer();
try {
URL url = new URL(strUrl);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
InputStream is=connection.getInputStream();
reader=new BufferedReader(new InputStreamReader(is, "UTF-8"));
String strRead = null;
while ((strRead = reader.readLine()) != null) {
sbf.append(strRead);
sbf.append("\r\n");
}
Map
result=mapper.readValue(sbf.toString(), Map.class);
//获取全部数据
List