/**
* 获取某月的最后一天
* @param: date 例如 :2017-04
*/
public static String getLastDayOfMonth(String date) {
int year = Integer.valueOf(date.substring(0,4));
int month = Integer.valueOf(date.substring(5,7));
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR,year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
//设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String lastDayOfMonth = sdf.format(cal.getTime());
return lastDayOfMonth;
}
/**
* 指定日期所在月份天数的集合
* @param date 2017-04
* @return
*/
private static int[] getMonthDays(String date) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, Integer.parseInt(date.substring(0, 4)));
calendar.set(Calendar.MONTH, Integer.parseInt(date.substring(5, 7)) -1);
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int[] days = new int[maxDay];
for(int i = 1; i <= maxDay; i++){
days[i-1] = i;
}
return days;
}
//根据今年获取明年 例如 :知道今年2017 date 可以2017 ,2017-01 ,2017-01-03
public static int getNextYear(String date){
String startTime = "";
String endTime = "";
int year = 0;
try{
Date date1 = new SimpleDateFormat("yyyy").parse(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
year = cal.get(Calendar.YEAR)+1;
}catch (ParseException e){
e.printStackTrace();
}
return year;
}
//获取当月包含每天日期的list
public List<String> getMonthlyList(){
int[] daysInMonth = getMonthDays("2017-11");
List<String> timeList = new ArrayList<>(); //指定月份的每天日期的集合
for(int value: daysInMonth){
if (value<10){
timeList.add("2017-11"+"-0"+value);
}else{
timeList.add("2017-11"+"-"+value);
}
}
System.out.println(timeList);
//运行结果:[2017-11-01, 2017-11-02, 2017-11-03, 2017-11-04, 2017-11-05, 2017-11-06, 2017-11-07, 2017-11-08,
// 2017-11-09, 2017-11-10, 2017-11-11, 2017-11-12, 2017-11-13, 2017-11-14, 2017-11-15, 2017-11-16, 2017-11-17,
// 2017-11-18, 2017-11-19, 2017-11-20, 2017-11-21, 2017-11-22, 2017-11-23, 2017-11-24, 2017-11-25, 2017-11-26,
// 2017-11-27, 2017-11-28, 2017-11-29, 2017-11-30]
return timeList;
}
/**
* 将utc时间转换为北京时间
* @param UTCStr utc时间字符串
* @param format 转换类型
* @return
* @throws ParseException
*/
public static String UTCToCST(String UTCStr, String format) throws ParseException {
Date date = null;
SimpleDateFormat sdf = new SimpleDateFormat(format);
date = sdf.parse(UTCStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) + 8);
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
}
/**
* local时间转换成UTC时间
* @param localTime
* @return
*/
public static String localToUTC(String localTime) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Date localDate= null;
try {
localDate = sdf.parse(localTime);
} catch (ParseException e) {
e.printStackTrace();
}
long localTimeInMillis=localDate.getTime();
/** long时间转换成Calendar */
Calendar calendar= Calendar.getInstance();
calendar.setTimeInMillis(localTimeInMillis);
/** 取得时间偏移量 */
int zoneOffset = calendar.get(java.util.Calendar.ZONE_OFFSET);
/** 取得夏令时差 */
int dstOffset = calendar.get(java.util.Calendar.DST_OFFSET);
/** 从本地时间里扣除这些差量,即可以取得UTC时间*/
calendar.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
/** 取得的时间就是UTC标准时间 */
Date utcDate=new Date(calendar.getTimeInMillis());
return format1.format(utcDate);
}
/**
* 获取一小时前的日期
* @param date
* @return
*/
public static String getBeforeHour(String date) {
String beforeHour = "";
try{
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = df.parse(date);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY)-1);
beforeHour = df.format(calendar.getTime());
// System.out.println("1小时前时间为:"+df.format(calendar.getTime()));
}catch (ParseException e){
e.printStackTrace();
}
return beforeHour;
}
/**
* 获取一天前的日期
* @param date
* @return
*/
public static String getBeforeDate(String date) {
String dateTime = "";
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = df.parse(date);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
calendar.set(Calendar.DATE,calendar.get(Calendar.DATE)-1);
dateTime = df.format(calendar.getTime()) +" 23:59:59";
} catch (ParseException e) {
e.printStackTrace();
}
return dateTime;
}
/**
* @Description: long类型转换成日期
*
* @param lo 毫秒数
* @return String yyyy-MM-dd HH:mm:ss
*/
public static String longToDate(long lo){
Date date = new Date(lo);
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sd.format(date);
}
/**
* @Description: String类型毫秒数转换成日期
* [@param](http://my.oschina.net/param) lo 毫秒数
* @return String yyyy-MM-dd HH:mm:ss
*/
public static String stringToDate(String lo){
long time = Long.parseLong(lo);
Date date = new Date(time);
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sd.format(date);
}
//输出指定两个日期之间的所有日期
public static List<String> getTimeScope(String date1, String date2){
List<String> timeList = new ArrayList<>();
if(date1.equals(date2)){
System.out.println("两个日期相等!");
return null;
}
String tmp;
if(date1.compareTo(date2) > 0){ //确保 date1的日期不晚于date2
tmp = date1; date1 = date2; date2 = tmp;
}
tmp = dateFormat.format(str2Date(date1).getTime());
int num = 0;
while(tmp.compareTo(date2) <= 0){
System.out.println(tmp);
timeList.add(tmp);
num++;
tmp = dateFormat.format(str2Date(tmp).getTime() + 3600*24*1000);
}
return timeList;
}
/**
* 获取月份起始日期
* @param date
* @return
* @throws ParseException
*/
public static String getMinMonthDate(String date) throws ParseException{
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat.parse(date));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return dateFormat.format(calendar.getTime());
}
/**
* 获取月份最后日期
* @param date
* @return
* @throws ParseException
*/
public static String getMaxMonthDate(String date) throws ParseException{
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateFormat.parse(date));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return dateFormat.format(calendar.getTime());
}
/**
* 获取当天的开始时间
* @return
*/
public static Date getDayBegin() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 获取当天的结束时间
* @return
*/
public static Date getDayEnd() {
Calendar cal = new GregorianCalendar();
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
return cal.getTime();
}