最近开发的项目平凡用到时间的各种计算及转化,虽然没多少技术含量但也记录一下。
直接上代码拿走不谢。
import org.apache.http.client.utils.DateUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class DateUtil {
/**
* 获取系统你天前或n天后的日期
* @param days
* @return
*/
public static String daysAgo(int days){
Calendar calendar1 = Calendar.getInstance();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
calendar1.add(Calendar.DATE, days);
String days_ago = sdf1.format(calendar1.getTime());
return days_ago;
}
/**
* 时间戳转换成日期格式字符串
* @param seconds 精确到秒的字符串
* @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 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 "";
}
/**
* 取得当前时间戳(精确到秒)
* @return
*/
public static String timeStamp(){
long time = System.currentTimeMillis();
String t = String.valueOf(time/1000);
return t;
}
/**
* 获取两个日期相差的天数
*
* @param startDateStr 开始时间
* @param endDateStr 结束时间
*/
public static int getDayBetweenTwoDate(String startDateStr, String endDateStr) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
int days = 0;
try {
Date startDate = simpleDateFormat.parse(startDateStr);
Date endDate = simpleDateFormat.parse(endDateStr);
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(endDate);
//计算两个日期相差的天数
//startCalendar.getTime().getTime()返回long毫秒数形式,毫秒转为秒所以除以1000
//1天=24小时,1小时=60分,1分=60秒,所以两个时间的差再除以60 * 60 * 24换算成天的形式
days = ((int) (startCalendar.getTime().getTime() / 1000) - (int) (endCalendar.getTime().getTime() / 1000)) / (60 * 60 * 24);
} catch (ParseException e) {
e.printStackTrace();
}
return days;
}
/**
* 某一个月第一天和最后一天
*
* @param date 指定日期
* @param pattern 日期格式
* @param isNeedHms 是否需要时分秒
* @return
*/
public static Map<String, Object> getFirstLastDayByMonth(Date date,
String pattern, boolean isNeedHms) {
SimpleDateFormat df = new SimpleDateFormat(pattern);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Date theDate = calendar.getTime();
// 第一天
GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
gcLast.setTime(theDate);
gcLast.set(Calendar.DAY_OF_MONTH, 1);
String day_first = df.format(gcLast.getTime());
StringBuffer str = new StringBuffer().append(day_first);
if (isNeedHms)
str.append(" 00:00:00");
day_first = str.toString();
// 最后一天
calendar.add(Calendar.MONTH, 1); // 加一个月
calendar.set(Calendar.DATE, 1); // 设置为该月第一天
calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天
String day_last = df.format(calendar.getTime());
StringBuffer endStr = new StringBuffer().append(day_last);
if (isNeedHms)
endStr.append(" 23:59:59");
day_last = endStr.toString();
Map<String, Object> map = new HashMap<String, Object>();
map.put("first", day_first);
map.put("last", day_last);
return map;
}
/**
* 获取当前季度
*
*/
public static String getQuarter() {
Calendar c = Calendar.getInstance();
int month = c.get(c.MONTH) + 1;
int quarter = 0;
if (month >= 1 && month <= 3) {
quarter = 1;
} else if (month >= 4 && month <= 6) {
quarter = 2;
} else if (month >= 7 && month <= 9) {
quarter = 3;
} else {
quarter = 4;
}
return quarter + "";
}
/**
* 获取某季度的第一天和最后一天
* @param num 第几季度
*/
public static String[] getCurrQuarter(int num) {
String[] s = new String[2];
String str = "";
// 设置本年的季
Calendar quarterCalendar = null;
switch (num) {
case 1: // 本年到现在经过了一个季度,在加上前4个季度
quarterCalendar = Calendar.getInstance();
quarterCalendar.set(Calendar.MONTH, 3);
quarterCalendar.set(Calendar.DATE, 1);
quarterCalendar.add(Calendar.DATE, -1);
str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
s[0] = str.substring(0, str.length() - 5) + "01-01";
s[1] = str;
break;
case 2: // 本年到现在经过了二个季度,在加上前三个季度
quarterCalendar = Calendar.getInstance();
quarterCalendar.set(Calendar.MONTH, 6);
quarterCalendar.set(Calendar.DATE, 1);
quarterCalendar.add(Calendar.DATE, -1);
str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
s[0] = str.substring(0, str.length() - 5) + "04-01";
s[1] = str;
break;
case 3:// 本年到现在经过了三个季度,在加上前二个季度
quarterCalendar = Calendar.getInstance();
quarterCalendar.set(Calendar.MONTH, 9);
quarterCalendar.set(Calendar.DATE, 1);
quarterCalendar.add(Calendar.DATE, -1);
str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
s[0] = str.substring(0, str.length() - 5) + "07-01";
s[1] = str;
break;
case 4:// 本年到现在经过了四个季度,在加上前一个季度
quarterCalendar = Calendar.getInstance();
str = DateUtils.formatDate(quarterCalendar.getTime(), "yyyy-MM-dd");
s[0] = str.substring(0, str.length() - 5) + "10-01";
s[1] = str.substring(0, str.length() - 5) + "12-31";
break;
}
return s;
}
/**
* 根据日期(Date)获取哪年的第几季度
* @param date
* @return
* @throws ParseException
*/
public static String GetQuarterByDate(String date) throws ParseException{
if(date == ""|| "".equals(date)){
return "";
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date datePar = sdf.parse(date);
Calendar calendar = Calendar.getInstance();
calendar.setTime(datePar);
//String year = String.valueOf(calendar.get(Calendar.YEAR));
int mouth = datePar.getMonth();
if(mouth>=1 && mouth<=3){
return "1"; //"第一季度";
}else if(mouth>=4 && mouth<=6){
return "2"; //"第二季度";
}else if(mouth>=7 && mouth<=9){
return "3"; //"第三季度";
}else if(mouth>=10 && mouth<=12){
return "4"; //"第四季度";
}else{
return "";
}
}
/**
* 用途:以指定的格式格式化日期字符串
* @param pattern 字符串的格式
* @param currentDate 被格式化日期
* @return String 已格式化的日期字符串
* @throws NullPointerException 如果参数为空
*/
public static String formatDate(Date currentDate, String pattern){
if(currentDate == null || "".equals(pattern) || pattern == null){
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(currentDate);
}
/**
*
* @param time 时间
* @param num 加的数,-num就是减去
* @return 减去相应的数量的月份的日期
* @throws ParseException Date
*/
public static Date monthAddNum(Date time, Integer num){
//SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Date date = format.parse(time);
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.add(Calendar.MONTH, num);
Date newTime = calendar.getTime();
return newTime;
}
public static void main(String[] args) {
}
}