时间戳与日期格式字符串的互转
/**
* 时间戳转换成日期格式字符串
* @param seconds 精确到秒的字符串
* @param formatStr
* @return
*/
public static String timeStamp2Date(String seconds,String format) {
if(seconds == null || seconds.isEmpty() || seconds.equals("null")){
return "";
}
if(format == null || format.isEmpty()){
format = "yyyy-MM-dd HH:mm:ss";
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date(Long.valueOf(seconds+"000")));
}
/**
* 日期格式字符串转换成时间戳
* @param date 字符串日期
* @param format 如:yyyy-MM-dd HH:mm:ss
* @return
*/
public static String date2TimeStamp(String date_str,String format){
try {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return String.valueOf(sdf.parse(date_str).getTime()/1000);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
取得当前时间戳(精确到秒)
public static String timeStamp(){
long time = System.currentTimeMillis();
String t = String.valueOf(time/1000);
return t;
}
取得当前日期
//pattern范围yyyy-MM-dd'T'HH:mm:ss.SSS Z
public static String getNowDate(String datePattern){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
return sdf.format(date);
}
取得n天开始,结束的时间
/* N天开始时间
* 1 == 昨天
* 2 == 前天
* 3 == 以此类推
*/
public static long getNumberOfDaysStartUnixTime(int numberOfDays ) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)-numberOfDays,0,0,0);
long yesterdayStart = calendar.getTimeInMillis();
return yesterdayStart;
}
/* N天前结束时间
* 1 == 昨天
* 2 == 前天
* 3 == 以此类推
*/
public static long getNumberOfDaysEndUnixTime(int numberOfDays) {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)-numberOfDays,23,59,59);
long yesterdayEnd = calendar.getTimeInMillis();
return yesterdayEnd;
}
根据json条件获取时间戳
public static Long getTimestampByDateLimitDay(Integer day, int addYear, int addMonth, Long startTime) {
try {
Calendar startCal = Calendar.getInstance();
startCal.setTime(new Date(startTime));
Calendar cal = Calendar.getInstance();
// String year = String.valueOf(cal.get(Calendar.YEAR));
//根据传入的时间计算有效期 而非使用当前时间
String year = String.valueOf(startCal.get(Calendar.YEAR));
String month = startCal.get(Calendar.MONTH) >= 10 ? String.valueOf(startCal.get(Calendar.MONTH) + 1) : "0" + String.valueOf(startCal.get(Calendar.MONTH) + 1);
String dayString = day >= 10 ? String.valueOf(day) : "0" + day;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date;
date = df.parse(year + "-" + month + "-" + dayString + " 23:59:59");
cal.setTime(date);
cal.add(Calendar.YEAR, addYear);
cal.add(Calendar.MONTH, addMonth);
long tim = cal.getTimeInMillis();
return tim / 1000;
} catch (Exception e) {
throw new BusinessException("计算积分时间异常:" + e.getMessage());
}
}
public static Long getTimestampByDateLimitMonth(Integer month, Integer day, int addYear, int addMonth, Long startTime) {
try {
Calendar startCal = Calendar.getInstance();
startCal.setTime(new Date(startTime));
Calendar cal = Calendar.getInstance();
String year = String.valueOf(startCal.get(Calendar.YEAR));
String monthString = month >= 10 ? String.valueOf(month) : "0" + month;
String dayString = day >= 10 ? String.valueOf(day) : "0" + day;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date;
date = df.parse(year + "-" + monthString + "-" + dayString + " 23:59:59");
cal.setTime(date);
cal.add(Calendar.YEAR, addYear);
cal.add(Calendar.MONTH, addMonth);
long tim = cal.getTimeInMillis();
return tim / 1000;
} catch (Exception e) {
throw new BusinessException("计算积分时间异常:" + e.getMessage());
}
}
根据json实例:
{"clear_rule_type":"whole","validity_days":"365","clear_type":"month","clear_date":1,"clear_rule":"last"}
{"clear_rule_type":"whole","validity_days":"365","clear_type":"year","clear_date":08-30,"clear_rule":"l_last"}
使用后
expireTime = DateUtil.getTimestampByDateLimitDay(expireCondition.getInteger("clear_date"), 0, 1, startTime);
expireTime = DateUtil.getTimestampByDateLimitMonth(
DateUtil.getMonthByDate(expireCondition.getString("clear_date")),
DateUtil.getDayByDate(expireCondition.getString("clear_date")), 1, 0, startTime);
根据日期获取指定日,月份(配合上面使用)
public static Integer getMonthByDate(String time) {
time = time.replace("Z", " UTC");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
Date d = null;
try {
d = format.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(d);
return calendar.get(Calendar.MONTH)+1;
}
public static Integer getDayByDate(String time) {
time = time.replace("Z", " UTC");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
Date d = null;
try {
d = format.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(d);
return calendar.get(Calendar.DATE);
}
public static String getDayByDateShow(String time) {
try{
Date date = new Date();
date.setTime(Long.valueOf(time)*1000);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return formatter.format(date);
}catch (Exception e){
log.info("时间展示转换异常"+e.getMessage());
return time;
}
}
获取最近一个月的开始日期和结束日期的时间戳(从现在起算倒推30天为一个月)
public static Long getMonthStartDay() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, 0);
calendar.add(Calendar.MONTH, 0);
calendar.add(Calendar.DATE, -30);
//calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis() / 1000;
}
public static Long getMonthEndTime() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, 0);
calendar.add(Calendar.MONTH, 0);
calendar.add(Calendar.DATE, 0);
//calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));// 获取当前月最后一天
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, -1);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTimeInMillis() / 1000;
}
结合上面方法拼成一个月的开始到结束日期字符串
public static String getDateStart2End() {
String format = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date(getMonthStartDay() * 1000)) + " to " + sdf.format(new Date(getMonthEndTime() * 1000));
}
将长整型数字转换为日期格式的字符串
public static Date convert2String(String time) {
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
Date date;
try {
date = sf.parse(time);
} catch (Exception e) {
throw BusinessExceptionUtils.dataNotExistException("日期转换出错");
}
return date;
}
比较两个日期相差天数
/**
* date2比date1多的天数
*
* @param date1
* @param date2
* @return
*/
public static int differentDays(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
int day1 = cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if (year1 != year2) //不同一年
{
int timeDistance = 0;
for (int i = year1; i < year2; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) //闰年
{
timeDistance += 366;
} else //不是闰年
{
timeDistance += 365;
}
}
return timeDistance + (day2 - day1);
} else //同一年
{
System.out.println("判断day2 - day1 : " + (day2 - day1));
return day2 - day1;
}
}
版权声明:本文为Koikoi12原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。