引言
说来惭愧,常常在开发的过程中,忘记一些简单的时间获取和转化,又得去翻以前的项目和笔记,于是乎时间日期的相关操作积累了也不少,但没有好好总结下,于是乎决定把这些时间操作封装为一个工具类以后再也不要再去查找笔记。
一、获取系统当前的时间并格式化
/**
* @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(
"小");
if (hourEndIndex != -
1) {
hour = result.substring(
0, hourEndIndex);
if (Integer.parseInt(hour) <
10) {
hour =
"0" + hour;
}
minStartIndex = result.indexOf(
"时");
}
else {
hour =
"00";
}
if (minStartIndex != -
1 && result.indexOf(
"分") != -
1) {
minute = result.substring(minStartIndex +
1, minEndIndex);
if (Integer.parseInt(minute) <
10) {
minute =
"0" + minute;
}
}
else {
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);
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();
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){
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+
"秒";
}
/**
* 计算两个日期之间的时间差 xx天xx小时xx分xx秒
* @param date
* @param date2
*/
public static String
calumDiffDate2(Date begin,Date end){
long between=Math.abs((end.getTime()-begin.getTime())/
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){
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;
}
}
未完待续
转载请注明原文地址: https://ju.6miu.com/read-665271.html