Java时间的格式化、大小比较、指定日期的前后某一天的日期和星期几的工具类
在实际开发工作中,经常会遇到:时间格式化、时间大小比较、获取指定日期的前一天或前一个月或者后一个月、获取当前日期或具体时间、将时间差值由毫秒数转化为x天x时x分x秒的格式、获取某个月有多少天等这样的情况,现在,博主整理了这个具类,对于这种常见情况都可以解决。
Java通过年份和月份得到当月的天数:
/**
* 通过年份和月份 得到当月的天数
* @param year
* @param month
* @return
*/
public static int getMonthDays(int year, int month) {
month++;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
return 29;
} else {
return 28;
}
default:
return -1;
}
}
Java/Android返回当前月份1号位于周几:
/**
* 返回当前月份1号位于周几
* @param year 年份
* @param month 月份,传入系统获取的,不需要正常的
* @return 日:1 一:2 二:3 三:4 四:5 五:6 六:7
*/
public static int getFirstDayWeek(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, 1);
return calendar.get(Calendar.DAY_OF_WEEK);
}
Java/Android获取指定日期是星期几:
/**
* 获取指定日期是星期几
* 参数为null时表示获取当前日期是星期几
* @param specifiedDay:指定日期yyyy-MM-dd
* @return
*/
public static String getWeekOfDate(String specifiedDay) {
Date date = null;
String[] weekOfDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
date = new Date();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0) {
w = 0;
}
return weekOfDays[w];
}
Java/Android获取当前时间【yyyy-MM-dd HH:mm:ss】:
/**
* 获取当前时间【yyyy-MM-dd HH:mm:ss】
* @return
*/
public static String getNowTime() {
//法1
//Date date=new Date();
//DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//String time=format.format(date);
//return time;
//法2
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
return df.format(new Date()).toString();// new Date()为获取当前系统时间
}
Java/Android获取当前日期【yyyy-MM-dd】:
/**
* 获取当前日期【yyyy-MM-dd】
* @return
*/
public static String getNowDate() {
//法1
//Date date=new Date();
//DateFormat format=new SimpleDateFormat("yyyy-MM-dd");
//String time=format.format(date);
//return time;
//法2
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
return df.format(new Date()).toString();// new Date()为获取当前系统时间
}
Java/Android获取当前时间【yyyy年MM月dd日】:
/**
* 获取当前时间【yyyy年MM月dd日】
*/
public static String getCurrentDate2() {
Date date = new Date();
DateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
String time = format.format(date);
return time;
}
Java/Android输入格式化时间yyyy-MM-dd HH:mm返回时间戳:
/**
* 输入格式化时间yyyy-MM-dd HH:mm返回时间戳
* 日期格式可修改
*/
public static long getTimeStamp(String time) {
String SEPARATE = " ";//时间分隔符
String TIME_FORMAT = "yyyy-MM-dd" + SEPARATE + "HH:mm";//时间格式
SimpleDateFormat sdr = new SimpleDateFormat(TIME_FORMAT,
Locale.CHINA);
Date date;
long timestamp = 0;
try {
date = sdr.parse(time);
timestamp = date.getTime();
} catch (ParseException e) {
e.printStackTrace();
return System.currentTimeMillis();
}
return timestamp;
}
Java/Android获取今天的前一天日期:
/***
* 获取今天的前一天日期,不是指定日期的前一天,注意和getSpecifiedDayBefore的区别
* 日期格式可修改
*/
public static String getNextDay() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -1);
Date date = calendar.getTime();
String now = sdf.format(date);
return now;
}
Java/Android获得指定日期的前一天:
/**
* 获得指定日期的前一天
* 日期格式可修改
* @param specifiedDay:2017-05-03
* @return 2017-05-03的前一天
* @throws Exception
*/
public static String getSpecifiedDayBefore(String specifiedDay) {
Calendar c = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day - 1);
String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
return dayBefore;
}
Java/Android获得指定日期的后一天:
/**
* 获得指定日期的后一天
* 日期格式yyyy-MM-dd可修改
* @param specifiedDay
* @return
*/
public static String getSpecifiedDayAfter(String specifiedDay) {
Calendar c = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(specifiedDay);
} catch (ParseException e) {
e.printStackTrace();
}
c.setTime(date);
int day = c.get(Calendar.DATE);
c.set(Calendar.DATE, day + 1);
String dayAfter = new SimpleDateFormat("yyyy-MM-dd")
.format(c.getTime());
return dayAfter;
}
Java/Android获取当前时间前一周、前一月、前三个月、前一年的时间:
/***
* 日期格式可修改
* java获取当前时间前一周、前一月、前三个月、前一年的时间
* flag:1:表示获取当前时间前一周;2:当前时间前一个月;3:当前时间前三个月时间;4:当前时间前一年
*/
public static String getBeforeTime(int flag) {
//SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format = new SimpleDateFormat(TIME_FORMAT);
Calendar c = Calendar.getInstance();
String beforeTime = "";
switch (flag) {
case 1:
//过去七天
c.setTime(new Date());
c.add(Calendar.DATE, -7);
Date d = c.getTime();
String day = format.format(d);
System.out.println("过去七天:" + day);
beforeTime = day;
break;
case 2:
//过去一月
c.setTime(new Date());
c.add(Calendar.MONTH, -1);
Date m = c.getTime();
String mon = format.format(m);
System.out.println("过去一个月:" + mon);
beforeTime = mon;
break;
case 3:
//过去三个月
c.setTime(new Date());
c.add(Calendar.MONTH, -3);
Date m3 = c.getTime();
String mon3 = format.format(m3);
System.out.println("过去三个月:" + mon3);
beforeTime = mon3;
break;
case 4:
//过去一年
c.setTime(new Date());
c.add(Calendar.YEAR, -1);
Date y = c.getTime();
String year = format.format(y);
System.out.println("过去一年:" + year);
beforeTime = year;
break;
default:
//过去七天
c.setTime(new Date());
c.add(Calendar.DATE, -7);
Date d2 = c.getTime();
String day2 = format.format(d2);
System.out.println("过去七天:" + day2);
beforeTime = day2;
break;
}
return beforeTime;
}
时间戳转化为聊天界面显示字符串:
/**
* 时间转化为聊天界面显示字符串
* @param timeStamp 单位为秒
*/
public static String getChatTimeStr(long timeStamp) {
if (timeStamp == 0) return "";
Calendar inputTime = Calendar.getInstance();
inputTime.setTimeInMillis(timeStamp * 1000);
Date currenTimeZone = inputTime.getTime();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
if (calendar.before(inputTime)) {
//当前时间在输入时间之前
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
return sdf.format(currenTimeZone);
}
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
if (calendar.before(inputTime)) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
return sdf.format(currenTimeZone);
}
calendar.add(Calendar.DAY_OF_MONTH, -1);
if (calendar.before(inputTime)) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
return "昨天" + " " + sdf.format(currenTimeZone);
} else {
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.MONTH, Calendar.JANUARY);
if (calendar.before(inputTime)) {
SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日 HH:mm");
return sdf.format(currenTimeZone);
} else {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
return sdf.format(currenTimeZone);
}
}
}
Java/Android获取两个时间的日期差并转化为xx天xx时xx分xx秒的格式:
/**
* 获取两个时间的日期差并转化为xx天xx时xx分xx秒的格式
* @param date1 2004-03-26 13:31:40
* @param date2 2004-01-02 11:30:24
* @return
*/
public static String getDateCha(String date1, String date2) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (date1 == null || date2 == null || "".equals(date2) || "".equals(date1)) {
return null;
}
Date d1 = null;
Date d2 = null;
try {
d1 = df.parse(date1);
d2 = df.parse(date2);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
long l = d1.getTime() - d2.getTime();
if (l < 0) {
l = d2.getTime() - d1.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);
String time = "" + day + "天" + hour + "小时" + min + "分" + s + "秒";
if (day == 0) {
time = "" + hour + "小时" + min + "分" + s + "秒";
}
return time;
}
Java/Android比较两个格式化时间的大小:
/**
* 比较两个格式化时间的大小
* @param date1 2004-03-26 13:31:40.120
* @param date2 2004-01-02 11:30:24.102
* @return date1>date2 true;date1<=date2 false;
*/
public static boolean compareDate(String date1, String date2) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss");
if (date1 == null || date2 == null || "".equals(date2) || "".equals(date1)) {
return false;
}
Date d1 = null;
Date d2 = null;
try {
d1 = df.parse(date1);
d2 = df.parse(date2);
} catch (ParseException e) {
e.printStackTrace();
return false;
}
long l = d1.getTime() - d2.getTime();
return l>0;
}
Java/Android将毫秒数转化为xx天xx时xx分xx秒的格式:
/**
* 将毫秒数转化为xx天xx时xx分xx秒的格式
* @param haomiao 毫秒数
* @return
*/
public String getDateChaByHaoMiao(long haomiao) {
if (haomiao <= 0) {
return null;
}
long l = haomiao;
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);
String time = "" + day + "天" + hour + "小时" + min + "分" + s + "秒";
if (day == 0) {
time = "" + hour + "小时" + min + "分" + s + "秒";
}
return time;
}
Java/Android获取精确到毫秒的格式化时间:
/***
* 获取精确到毫秒的格式化时间
* @return
*/
public static String getJingQueTime() {
Date now = new Date();
SimpleDateFormat sdf = sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.sss", Locale.CHINA);
String time = sdf.format(now);
return time;
}
Java/Android验证字符串是否是一个合法的日期格式:
/**
* 验证字符串是否是一个合法的日期格式
* template:格式化模版,可以按照自己的需要修改
* 使用方式:isValidDate("2017-05-10", "yyyy-MM-dd")或者
* isValidDate("2017-05-10 12:56", "yyyy-MM-dd HH:mm")
* isValidDate("2017-05-10 12:56:23", "yyyy-MM-dd HH:mm:ss")
*/
private boolean isValidDate(String date, String template) {
boolean convertSuccess = true;
// 指定日期格式
SimpleDateFormat format = new SimpleDateFormat(template, Locale.CHINA);
try {
// 设置lenient为false.否则SimpleDateFormat会比较宽松地验证日期,比如2015/02/29会被接受,并转换成2015/03/01
format.setLenient(false);
format.parse(date);
} catch (Exception e) {
// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
convertSuccess = false;
}
return convertSuccess;
}
至此,该工具类所有代码已经贴完毕,如果你喜欢或者觉得对你有用,欢迎点赞!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。