import java.text.DateFormatSymbols;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SuppressWarnings(value={"rawtypes","unused"})
public class DataOperation {
public static void main(String[] args) {
System.out.println(DataOperation.getStartEndWeek("2018-4-11", "2018-4-23"));
}
public static Map getStartEndWeek(String start, String end) {
String[] starts = start.split("-");
String[] ends = end.split("-");
int startyear = Integer.parseInt(starts[0]);
int startmoune = Integer.parseInt(starts[1]);
int startday = Integer.parseInt(starts[2]);
int endyear = Integer.parseInt(ends[0]);
int endmoune = Integer.parseInt(ends[1]);
int endday = Integer.parseInt(ends[2]);
Calendar c_begin = new GregorianCalendar();
Calendar c_end = new GregorianCalendar();
DateFormatSymbols dfs = new DateFormatSymbols();
String[] weeks = dfs.getWeekdays();
c_begin.set(startyear, startmoune - 1, startday);
c_end.set(endyear, endmoune - 1, endday);
int count = 1;
c_end.add(Calendar.DAY_OF_YEAR, 1);
Map<String, Object> map = new HashMap<String, Object>();
List<String> listend = new ArrayList<String>();
List<String> liststart = new ArrayList<String>();
while (c_begin.before(c_end)) {
if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
listend.add(new java.sql.Date(c_begin.getTime().getTime()).toString());
count++;
}
if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
liststart.add(new java.sql.Date(c_begin.getTime().getTime()).toString());
}
c_begin.add(Calendar.DAY_OF_YEAR, 1);
}
map.put("WeekStart", liststart);
map.put("WeekEnd", listend);
map.put("WeekCount", count);
return map;
}
public String getFirstDayOfMonth(int year, int month) {
String monthStr = month < 10 ? "0" + month : String.valueOf(month);
return year + "-" + monthStr + "-" + "01";
}
public String getLastDayOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DATE, 1);
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_YEAR, -1);
return calendar.get(Calendar.YEAR) + "-"
+ (calendar.get(Calendar.MONTH) + 1) + "-"
+ calendar.get(Calendar.DAY_OF_MONTH);
}
private Calendar getCalendarFormYear(int year) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.YEAR, year);
return cal;
}
public String getStartDayOfWeekNo(int year, int weekNo) {
Calendar cal = getCalendarFormYear(year);
cal.set(Calendar.WEEK_OF_YEAR, weekNo);
return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1)
+ "-" + cal.get(Calendar.DAY_OF_MONTH);
}
public String getEndDayOfWeekNo(int year, int weekNo) {
Calendar cal = getCalendarFormYear(year);
cal.set(Calendar.WEEK_OF_YEAR, weekNo);
cal.add(Calendar.DAY_OF_WEEK, 6);
return cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1)
+ "-" + cal.get(Calendar.DAY_OF_MONTH);
}
public int dayForWeek(String pTime) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(format.parse(pTime));
int dayForWeek = 0;
if (c.get(java.util.Calendar.DAY_OF_WEEK) == 1) {
dayForWeek = 7;
} else {
dayForWeek = c.get(java.util.Calendar.DAY_OF_WEEK) - 1;
}
return dayForWeek;
}
private Map<String, Date> onceWeek(Date date) {
java.util.Calendar currentDate = new GregorianCalendar();
currentDate.setTime(date);
currentDate.setFirstDayOfWeek(java.util.Calendar.MONDAY);
currentDate.set(java.util.Calendar.HOUR_OF_DAY, 0);
currentDate.set(java.util.Calendar.MINUTE, 0);
currentDate.set(java.util.Calendar.SECOND, 0);
currentDate.set(java.util.Calendar.DAY_OF_WEEK,
java.util.Calendar.MONDAY);
Date dBegin = (Date) currentDate.getTime().clone();
currentDate.setFirstDayOfWeek(java.util.Calendar.MONDAY);
currentDate.set(java.util.Calendar.HOUR_OF_DAY, 23);
currentDate.set(java.util.Calendar.MINUTE, 59);
currentDate.set(java.util.Calendar.SECOND, 59);
currentDate.set(java.util.Calendar.DAY_OF_WEEK,
java.util.Calendar.SUNDAY);
Date dEnd = (Date) currentDate.getTime().clone();
Map<String, Date> map = new HashMap<>();
map.put("dBegin", dBegin);
map.put("dEnd", dEnd);
return map;
}
public static String[] getDates(String dateFrom, String dateEnd,
String weekDays) {
long time = 1l;
long perDayMilSec = 24 * 60 * 60 * 1000;
List<String> dateList = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strWeekNumber = weekForNum(weekDays);
try {
dateFrom = sdf.format(sdf.parse(dateFrom).getTime() - perDayMilSec);
while (true) {
time = sdf.parse(dateFrom).getTime();
time = time + perDayMilSec;
Date date = new Date(time);
dateFrom = sdf.format(date);
if (dateFrom.compareTo(dateEnd) <= 0) {
Integer weekDay = dayForWeek(date);
if (strWeekNumber.indexOf(weekDay.toString()) != -1) {
dateList.add(dateFrom);
}
} else {
break;
}
}
} catch (ParseException e) {
e.printStackTrace();
}
String[] dateArray = new String[dateList.size()];
dateList.toArray(dateArray);
return dateArray;
}
public static Integer dayForWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK);
}
public static String weekForNum(String weekDays) {
String weekNumber = "";
if (weekDays.indexOf("|") != -1) {
String[] strWeeks = weekDays.split("\|");
for (int i = 0; i < strWeeks.length; i++) {
weekNumber = weekNumber + ""
+ getWeekNum(strWeeks[i]).toString();
}
} else {
weekNumber = getWeekNum(weekDays).toString();
}
return weekNumber;
}
public static Integer getWeekNum(String strWeek) {
Integer number = 1;
if ("星期日".equals(strWeek)) {
number = 1;
} else if ("星期一".equals(strWeek)) {
number = 2;
} else if ("星期二".equals(strWeek)) {
number = 3;
} else if ("星期三".equals(strWeek)) {
number = 4;
} else if ("星期四".equals(strWeek)) {
number = 5;
} else if ("星期五".equals(strWeek)) {
number = 6;
} else if ("星期六".equals(strWeek)) {
number = 7;
} else {
number = 1;
}
return number;
}
}