引言
说来惭愧,常常在开发的过程中,忘记一些简单的时间获取和转化,又得去翻以前的项目和笔记,于是乎时间日期的相关操作积累了也不少,但没有好好总结下,于是乎决定把这些时间操作封装为一个工具类以后再也不要再去查找笔记。
一、获取系统当前的时间并格式化
1、获取系统当前的时间并使用SimpleDateFormat 格式化
/**
* @param format yyyy年MM月dd日 HH:mm:ss、 yyyy-MM-dd HH:mm:ss等
* @param date 默认为当前时间 也可以传入其他的date
* @return 返回当地当前的时间 2016年12月07日 11:25:51
*/
private static String formatDate(@NonNull String format,Date date){
if(date==null){
date = new Date(System.currentTimeMillis());//获取当前时间
}
SimpleDateFormat formatter = new SimpleDateFormat (format);
String str=formatter.format(date);
return str;
}
//使用
Date curDate = new Date(System.currentTimeMillis());//获取当前时间
System.out.println(formatDate("yyyy-MM-dd HH:mm:ss", curDate));
2、获取系统当前的时间(带时区)并格式化
/**
* @param format yyyy年MM月dd日 HH:mm:ss、 yyyy-MM-dd HH:mm:ss等
* @param date
* @return 返回当地当前的时间带时区 2016年12月7日 星期三 上午11时28分50秒 CST
*/
private static String formatLocaleDate(@NonNull Date date){
DateFormat dateformat=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,Locale.getDefault());
return dateformat.format(date);
}
3、通过Calendar获取年、月、日、时、分、秒
/**
* 通过Calendar获取当前时间日期
* @return 2016-12-26 18:27:52
*/
private static String getDateNow(){
Calendar c = Calendar.getInstance(); //获取日历对象
int year = c.get(Calendar.YEAR) ;
int month = c.get(Calendar.MONTH)+1;
int day = c.get(Calendar.DAY_OF_MONTH) ;
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int sec=c.get(Calendar.SECOND);
return String.valueOf(year)+String.valueOf("-"+month+"-")+String.valueOf(day)
+String.valueOf(" "+hour)+String.valueOf(":"+minute)+String.valueOf(":"+sec);
}
二、时间日期的一些常见转化
1、把xx小时xx分转为 xx:xx的格式的数字字符串
/**
* 把xx小时xx分转为 xx:xx的数字格式,但00:12并不是代表0时12分仅仅代表12分钟
* @param result
* @return
*/
private static String stringToDate(String result) {
if (result.length() > 0) {
String hour = "";
String minute = "";
int minStartIndex = -1;
int minEndIndex=result.indexOf("分");
int hourEndIndex = result.indexOf("小");
//所选择的超过一个小时,小于10的需要补0
if (hourEndIndex != -1) {
hour = result.substring(0, hourEndIndex);
if (Integer.parseInt(hour) < 10) {
hour = "0" + hour;
}
minStartIndex = result.indexOf("时");
} else {
hour = "00";//代表00小时而不是0时
}
//首先判断是否有分
if (minStartIndex != -1 && result.indexOf("分") != -1) {
minute = result.substring(minStartIndex + 1, minEndIndex);
if (Integer.parseInt(minute) < 10) {
minute = "0" + minute;
}
} else {
//小于1小时
if (result.indexOf("分") != -1) {
minute = result.substring(0, result.length() - 1);
if (Integer.parseInt(minute) < 10) {
minute = "0" + minute;
}
} else {
minute = "00";
}
}
return hour + ":" + minute;
} else {
return "";
}
}
2、把xx:xx的格式的数字字符串转为 xx小时xx分钟
/**
* 把选择的时间xx:xx的格式转为:xx小时xx分钟
* @param result
* @return
*/
private static String dateToString(String result) {
String temp = "";
if (result.length() >0) {
try {
int miniute=-1;
int hour = Integer.parseInt(result.substring(0, result.indexOf(":")));
if (hour > 0) {
temp = hour + "小时";
miniute = Integer.parseInt(result.substring(result.indexOf(":")+1,result.length()));
}else{
miniute = Integer.parseInt(result.substring(result.indexOf(":")+1));
}
if (miniute != 0) {
temp += miniute + "分钟";
}
} catch (Exception e) {
}
return temp;
} else {
return "";
}
}
3、指定日期加(减)上指定的天数、月数、日数、小时、分、秒
/**
* 指定日期加(减)上对应的天数
* @param date
* @param days
* @return
*/
public static Date addDay(Date date, int days) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//减去calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - days);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + days);
return calendar.getTime();
}
/**
* 指定日期加上对应的月数
* @param date
* @param months
* @return
*/
public static Date addMonth(Date date, int months) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + months);
return calendar.getTime();
}
/**
* 指定日期加上对应的小时
* @param date
* @param hours
* @return
*/
public static Date addHour(Date date, int hours) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) + hours);
return calendar.getTime();
}
/**
* 指定日期加上对应的分钟
* @param date
* @param i
* @return
*/
public static Date addMinute(Date date, int mins) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + mins);
return calendar.getTime();
}
/**
* 指定日期加上对应的秒
* @param date
* @param secs
* @return
*/
public static Date addSecond(Date date, int secs) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) + secs);
return calendar.getTime();
}
4、以友好的形式显示当年过去的时间
public static String asString(CharSequence s) {
if (s == null)
return "";
return s.toString();
}
/**
* 以友好的方式显示过去时间
* @param date
* @param now
* @return
*/
public static String asPastTimeFriendly(Date date, Date now) {
if (date == null || now == null || date.after(now)) {
return "";
}
long dtTime = date.getTime();
long nowTime = now.getTime();
//一天86400000ms
int days = (int) (nowTime / 86400000 - dtTime / 86400000); // 间隔天数
int hour = (int) ((nowTime - dtTime) / 3600000);// 间隔小时数
if (days == 0) {
if (hour == 0) {
return Math.max((nowTime - dtTime) / 60000, 1) + "分钟前";
} else {
return hour + "小时前";
}
} else if (days == 1) {
return "昨天"+asString(date,"H时")+"左右";
} else if (days == 2) {
return "前天"+asString(date, "H时")+"左右";
}else{
return asString(date, "H时")+"左右";
}
}
5、以友好的形式显示当年未来的时间
/**
* 以友好的方式显示未来时间
*
* @param date
* @param now
* @return
*/
public static String asFutureTimeFriendly(Date date, Date now) {
if (date == null || now == null || date.before(now)) {
return "";
}
long dateTime = date.getTime();
long nowTime = now.getTime();
int days = (int) ((dateTime - nowTime) / 86400000); // 间隔天数
if (days == 0) {
int hour = (int) ((dateTime - nowTime) / 3600000);// 间隔小时数
if (hour == 0) {
int minutes = (int) (dateTime - nowTime) / 60000; // 间隔分钟数
if (minutes == 0) {
return Math.max((dateTime - nowTime) / 1000, 1) + "秒钟后";
} else {
return Math.max((dateTime - nowTime) / 60000, 1) + "分钟后";
}
} else {
return hour + "小时后";
}
} else if (days == 1) {
return "明天" + asString(date,"H时")+"左右";
} else if (days == 2) {
return "后天" + asString(date, "H时") + "左右";
} else {
return asString(date, "M月d日H时");
}
}
6、计算两个日期的时间差
/**
* 计算两个日期之间的时间差 xx天xx小时xx分xx秒
* @param date
* @param date2
*/
public static void calumDiffDate(Date date,Date date2){
/*SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date= df.parse("2004-03-26 13:31:40");
Date now=df.parse("2004-01-02 11:30:24");*/
long l=Math.abs(date.getTime()-date2.getTime());
long day=l/(24*60*60*1000);
long hour=(l/(60*60*1000)-day*24);
long min=((l/(60*1000))-day*24*60-hour*60);
long s=(l/1000-day*24*60*60-hour*60*60-min*60);
return ""+day+"天"+hour+"小时"+min+"分"+s+"秒";
//System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒");
}
/**
* 计算两个日期之间的时间差 xx天xx小时xx分xx秒
* @param date
* @param date2
*/
public static String calumDiffDate2(Date begin,Date end){
/*
SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date begin=dfs.parse("2004-01-02 11:30:24");
Date end = dfs.parse("2004-03-26 13:31:40");
*/
long between=Math.abs((end.getTime()-begin.getTime())/1000);//除以1000是为了转换成秒
long day=between/(24*3600);
long hour=between%(24*3600)/3600;
long minute=between%3600/60;
long second=between%60/60;
return ""+day+"天"+hour+"小时"+minute+"分"+second+"秒";
}
7、比较两个日期的大小
/**
* 比较两个日期的大小
* @param dateStr 例"2008-01-25 09:12:09"
* @param dateStr2
* @return 0: 相等 ; -1 :date<date2 ; 1 date>date2
*/
public static int compareToDate(String dateStr,String dateStr2){
/*String dateStr="2008-01-25 09:12:09";
String dateStr2="2008-01-29 09:12:11";*/
DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar=Calendar.getInstance();
Calendar calendar2=Calendar.getInstance();
try {
calendar.setTime(df.parse(dateStr));
calendar2.setTime(df.parse(dateStr2));
}catch(ParseException e){
System.err.println("格式不正确");
}
int result=calendar.compareTo(calendar2);
if(result==0) {
System.out.println("calendar相等calendar2");
return 0;
}
else if(result<0) {
System.out.println("c1小于calendar2");
return -1;
}
else{
System.out.println("c1大于calendar2");
return 1;
}
}
未完待续