/**
* DateUtil.java
* @description: 日期相关的操作
* @author
* @date 2015-12-3
* @version 0.0.1
*/
public class DateUtil {
private static final long m = 60*1000L;//分
private static final long hour = 3600*1000L;//小时
private static final long day = 24*hour;//天
public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
protected static final Logger log = LoggerFactory.getLogger(DateUtil.class);
/**
* 将一个字符串转换成日期格式
* @param date
* @param pattern
* @return
*/
public static Date toDate(String date, String pattern) {
if((""+date).equals("")){
return null;
}
if(pattern == null){
pattern = "yyyy-MM-dd";
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date newDate = new Date();
try {
newDate = sdf.parse(date);
} catch (Exception ex) {
ex.printStackTrace();
}
return newDate;
}
/**
* 把日期转换成字符串型
* @param date
* @param pattern
* @return
*/
public static String toString(Date date, String pattern){
if(date == null){
return "";
}
if(pattern == null){
pattern = "yyyy-MM-dd";
}
String dateString = "";
SimpleDateFormat sdf = new SimpleDateFormat(pattern,Locale.CHINA);
try {
dateString = sdf.format(date);
} catch (Exception ex) {
ex.printStackTrace();
}
return dateString;
}
/**
* 获取上个月的开始结束时间
* @return
*/
public static String[] getLastMonth() {
// 取得系统当前时间
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
// 取得系统当前时间所在月第一天时间对象
cal.set(Calendar.DAY_OF_MONTH, 1);
// 日期减一,取得上月最后一天时间对象
cal.add(Calendar.DAY_OF_MONTH, -1);
// 输出上月最后一天日期
int day = cal.get(Calendar.DAY_OF_MONTH);
String months = "";
String days = "";
if (month > 1) {
month--;
} else {
year--;
month = 12;
}
if (!(String.valueOf(month).length() > 1)) {
months = "0" + month;
} else {
months = String.valueOf(month);
}
if (!(String.valueOf(day).length() > 1)) {
days = "0" + day;
} else {
days = String.valueOf(day);
}
String firstDay = "" + year + "-" + months + "-01";
String lastDay = "" + year + "-" + months + "-" + days;
String[] lastMonth = new String[2];
lastMonth[0] = firstDay;
lastMonth[1] = lastDay;
// log.info(lastMonth[0] + "||" + lastMonth[1]);
return lastMonth;
}
/**
* 获取当月的开始结束时间
* @return
*/
public static String[] getCurrentMonth() {
// 取得系统当前时间
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1 ;
// 取得系统当前时间所在月第一天时间对象
cal.set(Calendar.DAY_OF_MONTH, 1);
// 日期减一,取得上月最后一天时间对象
cal.add(Calendar.DAY_OF_MONTH, -1);
// 输出上月最后一天日期
int day = cal.get(Calendar.DAY_OF_MONTH);
String months = "";
String days = "";
if (!(String.valueOf(month).length() > 1)) {
months = "0" + month;
} else {
months = String.valueOf(month);
}
if (!(String.valueOf(day).length() > 1)) {
days = "0" + day;
} else {
days = String.valueOf(day);
}
String firstDay = "" + year + "-" + months + "-01";
String lastDay = "" + year + "-" + months + "-" + days;
String[] currentMonth = new String[2];
currentMonth[0] = firstDay;
currentMonth[1] = lastDay;
// log.info(lastMonth[0] + "||" + lastMonth[1]);
return currentMonth;
}
/**
* 日期时间转换成文字
* @param date
* @return
*/
public static String getDateTimeString(Date date){
if(date==null){
throw new NullPointerException();
}
Date currentDate = new Date();
long cha = Math.abs(date.getTime()-currentDate.getTime());
// log.info("cha="+cha);
long hours = cha/hour;
// log.info(hours);
if(hours<1){
if(cha/m<=0){
return "刚刚";
}
return cha/m+"分钟前";
}
if(hours<24){
return cha/hour+"小时前";
}
if(hours<=72){
int nn = Integer.valueOf(cha/day+"");
if(cha%day>0){
nn++;
}
return nn+"天前";
}
return sdf.format(date);
}
/**
* 时间比较
* @param d1
* @param d2
* @return
*/
public static boolean compareDateTime(Date d1,Date d2) {
return d1.getTime() > d2.getTime();
}
public static int getDateline(){
return (int)(System.currentTimeMillis()/1000);
}
public static int getDateline(String date){
return (int)(toDate(date, "yyyy-MM-dd").getTime()/1000);
}
//int最大值反应到日期上为2038-01-19,故补充以下两个方法
public static long getDatelineLong(){
return (long)(System.currentTimeMillis()/1000);
}
public static long getDatelineLong(String date){
return (long)(toDate(date, "yyyy-MM-dd").getTime()/1000);
}
/**
* yyyy-MM-dd HH:mm:ss 获取系统时间
* @return
*/
public static Date getSystemDate(){
return new Date();
}
/**
* @param date1 需要比较的时间 不能为空(null),需要正确的日期格式
* @param date2 被比较的时间 为空(null)则为当前时间
* @param stype 返回值类型 0为多少天,1为多少个月,2为多少年
* @return
*/
public static int compareDate(String date1,String date2,int stype){
int n = 0;
String[] u = {"天","月","年"};
String formatStyle = stype==1?"yyyy-MM":"yyyy-MM-dd";
date2 = date2==null?DateUtil.getCurrentDate():date2;
DateFormat df = new SimpleDateFormat(formatStyle);
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
try {
c1.setTime(df.parse(date1));
c2.setTime(df.parse(date2));
} catch (Exception e3) {
System.out.println("wrong occured");
}
//List list = new ArrayList();
while (!c1.after(c2)) { // 循环对比,直到相等,n 就是所要的结果
//list.add(df.format(c1.getTime())); // 这里可以把间隔的日期存到数组中 打印出来
n++;
if(stype==1){
c1.add(Calendar.MONTH, 1); // 比较月份,月份+1
}
else{
c1.add(Calendar.DATE, 1); // 比较天数,日期+1
}
}
n = n-1;
if(stype==2){
n = (int)n/365;
}
System.out.println(date1+" -- "+date2+" 相差多少"+u[stype]+":"+n);
return n;
}
/**
* 得到当前日期 yyyy-MM-dd
* @return
*/
public static String getCurrentDate() {
Calendar c = Calendar.getInstance();
Date date = c.getTime();
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd");
return simple.format(date);
}
/**
* 得到当前日期 yyyy-MM-dd HH:mm:ss
* @return
*/
public static String getCurveDate() {
Calendar c = Calendar.getInstance();
Date date = c.getTime();
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simple.format(date);
}
public static void main(String[] args){
// log.info(DateUtil.getDateline());
// log.info(DateUtil.getDatelineLong("2015-12-31"));
log.info(DateUtil.toString(new Date(), "EEEE"));
String date = "2015-02-03";
DateUtil.compareDate(date, null, 0);
DateUtil.compareDate(date, null, 1);
DateUtil.compareDate(date, null, 2);
}
}
java 日期相关的操作
最新推荐文章于 2022-04-06 21:10:11 发布