package com.pdabc.sdk.util;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtils extends com.panda.sdk.util.DateUtils{
public static final String FORMAT_DATE_I = "yyyy-MM-dd HH:mm";
public static final String FORMAT_DATE_II = "yyyy/MM/dd HH:mm";
public static final String FORMAT_DATE_AND_TIME_I = "yyyy-MM-dd HH:mm:ss";
public static final String FORMAT_DATE_AND_TIME_II = "yyyy/MM/dd HH:mm:ss";
public static final String FORMAT_ONLY_DATE_I = "yyyy-MM-dd";
public static final String FORMAT_ONLY_DATE_II = "yyyy/MM/dd";
/**
* 获得今天所在周的周一日期
*
* @return
*/
public static Date getThisMondayDate() {
return getThisMondayDate(new Date());
}
/**
* 获得date所在周的周一日期
*
* @return
*/
public static Date getThisMondayDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 国外的习惯是周日是一周的第一天 如果今天是星期天 那么 国内 的定义 这周的星期一是六天前 而国外是第二天
int days = 0;
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
days = -6;
} else {
days = Calendar.MONDAY - calendar.get(Calendar.DAY_OF_WEEK);
}
calendar.add(Calendar.DATE, days);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 获取下一天
*
* @param date
* @return
*/
public static Date getNextDate(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.add(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}
/**
* 返回指定天数的日期
* @param date
* @param day
* @return
*/
public static Date getExpireDate(Date date, int day) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DAY_OF_MONTH, day);
return cal.getTime();
}
/**
* 获取明年1月1日
* @return
*/
public static Date getCurrentYearLastDay() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, 1);
cal.set(Calendar.MONTH, 0);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.add(Calendar.MILLISECOND, -1);
return cal.getTime();
}
/**
* 获取当前日期是星期几<br>
*
* @param date
* @return 当前日期是星期几
*/
public static String getWeekOfDate(Date date) {
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return weekDays[w];
}
/**
* 获得一个时间前多少分钟的值,例如getPreTime(“18:00:00”,10)表示获取18:00:00的前10分钟值为17:50
*/
public static String getPreTime(String time,int reduceTime) {
String[] result = time.split(":");
int h = Integer.parseInt(result[0]);
int m = Integer.parseInt(result[1]);
if (m - reduceTime < 0) {
h -= 1+(reduceTime/60);
m = m + ((reduceTime/60)+1)*60 - reduceTime;
} else {
m -= reduceTime;
}
String newStr = String.format("%s:%s:%s", h, m, result[2]);
return newStr;
}
/**
* 格式化日期和时间
* @param date
* @return
*/
public static Date format(String date) {
// SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_DATE_I);
//return sdf.parse(date);
SimpleDateFormat formatter = new SimpleDateFormat(FORMAT_DATE_I);
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(date, pos);
return strtodate;
}
/**
* 通过生日日期计算年龄(周岁算法):用当年年份-生日年份,若若生日的月份和日数 > 当年的月份和日数,则减1
*
* @param birDate 生日日期
* @return int年龄
*/
public static int getAgeByBirDate(Date birDate) {
int age = 0;
try {
if (birDate.after(new Date())) {
return 0;
}
Calendar now = Calendar.getInstance();
now.setTime(new Date());// 当前时间
Calendar birth = Calendar.getInstance();
birth.setTime(birDate);// 生日日期
// 年龄为虚岁,用当年年份-生日年份
age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
birth.set(Calendar.YEAR, now.get(Calendar.YEAR));
now.set(Calendar.HOUR_OF_DAY, birth.get(Calendar.HOUR_OF_DAY));
now.set(Calendar.MINUTE, birth.get(Calendar.MINUTE));
now.set(Calendar.SECOND, birth.get(Calendar.SECOND));
now.set(Calendar.MILLISECOND, birth.get(Calendar.MILLISECOND));
if (birth.after(now)) {// 若生日的月份和日数 > 当年的月份和日数,则减1
age--;
}
return age;
} catch (Exception e) {// 兼容性更强,异常后返回数据
return 0;
}
}
/**
* 通过年龄计算生日日期(周岁算法):年份减去年龄,默认当前的月份和日数,为生日日期的月份和日数
*
* @param age 年龄
* @return Date 生日日期
*/
public static Date getBirDateByAge(Integer age) {
Date birDate = new Date();
try {
Calendar now = Calendar.getInstance();
now.setTime(new Date());// 当前时间
// 通过年龄计算生日日期,年份减去年龄,默认当前的月份和日数 为生日日期的月份和日数
now.add(Calendar.YEAR, 0 - age);
birDate = now.getTime();
return birDate;
} catch (Exception e) {// 兼容性更强,异常后返回数据
return null;
}
}
}