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;
/**
* 时间处理类
*
* @author Administrator
*
*/
@SuppressWarnings(value={"rawtypes","unused"})
public class DataOperation {
/**
* 查询一个时间段的总周数和查询当前时间是第几周
*
* @param start
* @param end
* @return
*/
public static void main(String[] args) {
System.out.println(DataOperation.getStartEndWeek("2018-4-11", "2018-4-23"));
/*
* System.out.println("开始时间: " + cd.getStartDayOfWeekNo(2015, 47));
* System.out.println("结束时间:" + cd.getEndDayOfWeekNo(2015, 47));
* getDates("2013-04-01", "2014-04-14","星期一|星期二|星期日"); //获取某一时间段特定星期几的日期
*/
}
/**
* sjw
* China
* @param start 开始时间 ‘- ’隔开 例如(2018-4-11)不支持时分秒
* @param end 结束时间‘- ’隔开 例如(2018-4-11)不支持时分秒
* @return Map 其中2个Key(WeekStart每周的第一天的List,WeekEnd每周的最后一天的List,WeekCount时间段周数)
*/
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); // Calendar的月从0-11,所以4月是3.
c_end.set(endyear, endmoune - 1, endday); // Calendar的月从0-11,所以5月是4.
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)) {
/*System.out.println("第" + count + "周 日期:"
+ new java.sql.Date(c_begin.getTime().getTime()) + ","
+ weeks[c_begin.get(Calendar.DAY_OF_WEEK)]);*/
if (c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
/*System.out.println("第第" + count + "周 日期:"
+ new java.sql.Date(c_begin.getTime().getTime()) + ","
+ weeks[c_begin.get(Calendar.DAY_OF_WEEK)]);//每周的最后一天
*/ 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;
}
/**
* get first date of given month and year
*
* @param year
* @param month
* @return
*/
public String getFirstDayOfMonth(int year, int month) {
String monthStr = month < 10 ? "0" + month : String.valueOf(month);
return year + "-" + monthStr + "-" + "01";
}
/**
* get the last date of given month and year
*
* @param year
* @param month
* @return
*/
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);
}
/**
* get Calendar of given year
*
* @param year
* @return
*/
private Calendar getCalendarFormYear(int year) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.YEAR, year);
return cal;
}
/**
* get start date of given week no of a year
*
* @param year
* @param weekNo
* @return
*/
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);
}
/**
* get the end day of given week no of a year.
*
* @param year
* @param weekNo
* @return
*/
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);
}
/**
* 判断当前日期是星期几
*
* @param pTime
* 修要判断的时间
* @return dayForWeek 判断结果
* @Exception 发生异常
*/
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;
}
/**
* 查询一周的开始时间和结束时间
*
* @param date
* @return
*/
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;
}
/**
* 获取某一时间段特定星期几的日期
*
* @param dateFrom
* 开始时间
* @param dateEnd
* 结束时间
* @param weekDays
* 星期
* @return 返回时间数组
*/
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) {
//System.out.println(dateFrom);
dateList.add(dateFrom);
}
} else {
break;
}
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String[] dateArray = new String[dateList.size()];
dateList.toArray(dateArray);
return dateArray;
}
// 等到当期时间的周系数。星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
public static Integer dayForWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK);
}
/**
* 得到对应星期的系数 星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
*
* @param weekDays
* 星期格式 星期一|星期二
*/
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;
}
// 将星期转换为对应的系数 星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
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;
}
}
java 时间处理,时间处理工具类
于 2018-12-04 16:11:43 首次发布