Java时间工具类详解编程语言

import java.sql.Timestamp; 
import java.text.ParseException; 
import java.text.ParsePosition; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 
public class TimestampTool { 
/** 
* 将毫秒转成时间 
*/ 
public static String getTimeMillisToDate(long l) { 
Timestamp d = new Timestamp(l); 
return d.toString().substring(0, 19); 
} 
/** 
* 当前时间 
*  
* @return Timestamp 
*/ 
public static Timestamp crunttime() { 
return new Timestamp(System.currentTimeMillis()); 
} 
/** 
* 获取当前时间的字符串 
*  
* @return String ex:2006-07-07 
*/ 
public static String getCurrentDate() { 
Timestamp d = crunttime(); 
return d.toString().substring(0, 10); 
} 
/** 
* 获取当前时间的字符串 
*  
* @return String ex:2006-07-07 22:10:10 
*/ 
public static String getCurrentDateTime() { 
Timestamp d = crunttime(); 
return d.toString().substring(0, 19); 
} 
public static String getWeekDay() { 
Calendar date = Calendar.getInstance(); 
date.setTime(crunttime()); 
return new SimpleDateFormat("EEEE").format(date.getTime()); 
} 
/** 
* 获取指定时间的字符串,只到日期 
*  
* @param t 
*            Timestamp 
* @return String ex:2006-07-07 
*/ 
public static String getStrDate(Timestamp t) { 
return t.toString().substring(0, 10); 
} 
/** 
* 获取指定时间的字符串 
*  
* @param t 
*            Timestamp 
* @return String ex:2006-07-07 22:10:10 
*/ 
public static String getStrDateTime(Timestamp t) { 
return t.toString().substring(0, 19); 
} 
/** 
* 获得当前日期的前段日期 
*  
* @param days 
* @return String 
*/ 
public static String getStrIntervalDate(String days) { 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DATE, -Integer.parseInt(days)); 
String strBeforeDays = sdf.format(cal.getTime()); 
return strBeforeDays; 
} 
/** 
* 格式化时间 
*  
* @param dt 
*            String -> yyyy-MM-dd hh:mm:ss 
* @return java.util.Date.Date -> yyyy-MM-dd hh:mm:ss 
*/ 
public static Date parseDateTime(String dt) { 
Date jDt = new Date(); 
try { 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
if (dt.length() > 10) { 
jDt = sdf.parse(dt); 
} 
} catch (Exception ex) { 
ex.printStackTrace(); 
} 
return jDt; 
} 
/** 
* 格式化时间yyyy-MM-dd HH:mm:ss 
*  
* @param date 
*            java.util.Date 
* @return String -> yyyy-MM-dd HH:mm:ss 
*/ 
public static String parseDateTime(Date date) { 
String s = null; 
if (date != null) { 
try { 
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
s = f.format(date); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
return s; 
} 
/** 
* 格式化日期 
*  
* @param dt 
*            String -> yyyy-MM-dd 
* @return java.util.Date.Date -> yyyy-MM-dd 
*/ 
public static Date parseDate(String dt) { 
Date jDt = new Date(); 
try { 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
if (dt.length() >= 8) { 
jDt = sdf.parse(dt); 
} 
} catch (Exception ex) { 
ex.printStackTrace(); 
} 
return jDt; 
} 
/** 
* 格式化时间yyyy-MM-dd 
*  
* @param date 
*            java.util.Date 
* @return String -> yyyy-MM-dd 
*/ 
public static String parseDate(Date date) { 
String s = null; 
try { 
if (date != null) { 
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); 
s = f.format(date); 
} 
} catch (Exception e) { 
e.printStackTrace(); 
} 
return s; 
} 
/** 
*  
* @param dt 
* @return String 
*/ 
public static String getLongDateFromShortDate(String dt) { 
String strDT = dt; 
try { 
if (strDT != null && strDT.length() <= 10) { 
strDT = dt.trim() + " 00:00:00"; 
} 
} catch (Exception ex) { 
ex.printStackTrace(); 
} 
return strDT; 
} 
/** 
*  
* @param dt 
* @return String 
*/ 
public static String getShortDateToHHMM(String dt) { 
String jDt = dt; 
try { 
if (jDt != null && jDt.length() <= 10) { 
jDt = jDt + " 00:00"; 
} 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
jDt = sdf.parse(jDt).toLocaleString(); 
} catch (Exception ex) { 
ex.printStackTrace(); 
} 
return jDt; 
} 
/** 
*  
* @param dateStr 
* @return String 
*/ 
public static String formatDateToHHMM(String dateStr) { 
String resultDate = null; 
try { 
if (dateStr.length() > 10) { 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:ss"); 
Date date = sdf.parse(dateStr); 
resultDate = sdf.format(date); 
} else 
resultDate = dateStr; 
} catch (ParseException e) { 
e.printStackTrace(); 
} 
return resultDate; 
} 
/** 
* 返回日期 格式:2006-07-05 
*  
* @param str 
* @return Timestamp 
*/ 
public static Timestamp date(String str) { 
Timestamp tp = null; 
if (str.length() <= 10) { 
String[] string = str.trim().split("-"); 
int one = Integer.parseInt(string[0]) - 1900; 
int two = Integer.parseInt(string[1]) - 1; 
int three = Integer.parseInt(string[2]); 
tp = new Timestamp(one, two, three, 0, 0, 0, 0); 
} 
return tp; 
} 
// 获取指定日期之后的日期字符串 如 2007-04-15 后一天 就是 2007-04-16 
public static String getNextDay(String strDate, int day) { 
if (strDate != null && !strDate.equals("")) { 
Calendar cal1 = Calendar.getInstance(); 
String[] string = strDate.trim().split("-"); 
int one = Integer.parseInt(string[0]) - 1900; 
int two = Integer.parseInt(string[1]) - 1; 
int three = Integer.parseInt(string[2]); 
cal1.setTime(new Date(one, two, three)); 
cal1.add(Calendar.DAY_OF_MONTH, day); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
return formatter.format(cal1.getTime()); 
} else { 
return null; 
} 
} 
// 获取指定日期之后的日期字符串 如 2007-02-28 后一年 就是 2008-02-29 (含闰年) 
public static String getNextYear(String strDate, int year) { 
Calendar cal1 = Calendar.getInstance(); 
String[] string = strDate.trim().split("-"); 
int one = Integer.parseInt(string[0]) - 1900; 
int two = Integer.parseInt(string[1]) - 1; 
int three = Integer.parseInt(string[2]); 
cal1.setTime(new Date(one, two, three)); 
cal1.add(Calendar.YEAR, year); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
return formatter.format(cal1.getTime()); 
} 
/** 
* 返回时间和日期 格式:2006-07-05 22:10:10 
*  
* @param str 
* @return Timestamp 
*/ 
public static Timestamp datetime(String str) { 
Timestamp tp = null; 
if (str != null && str.length() > 10) { 
String[] string = str.trim().split(" "); 
String[] date = string[0].split("-"); 
String[] time = string[1].split(":"); 
int date1 = Integer.parseInt(date[0]) - 1900; 
int date2 = Integer.parseInt(date[1]) - 1; 
int date3 = Integer.parseInt(date[2]); 
int time1 = Integer.parseInt(time[0]); 
int time2 = Integer.parseInt(time[1]); 
int time3 = Integer.parseInt(time[2]); 
tp = new Timestamp(date1, date2, date3, time1, time2, time3, 0); 
} 
return tp; 
} 
/** 
* 返回日期和时间(没有秒) 格式:2006-07-05 22:10 
*  
* @param str 
* @return Timestamp 
*/ 
public static Timestamp datetimeHm(String str) { 
Timestamp tp = null; 
if (str.length() > 10) { 
String[] string = str.trim().split(" "); 
String[] date = string[0].split("-"); 
String[] time = string[1].split(":"); 
int date1 = Integer.parseInt(date[0]) - 1900; 
int date2 = Integer.parseInt(date[1]) - 1; 
int date3 = Integer.parseInt(date[2]); 
int time1 = Integer.parseInt(time[0]); 
int time2 = Integer.parseInt(time[1]); 
tp = new Timestamp(date1, date2, date3, time1, time2, 0, 0); 
} 
return tp; 
} 
/** 
* 获得当前系统日期与本周一相差的天数 
*  
* @return int 
*/ 
private static int getMondayPlus() { 
Calendar calendar = Calendar.getInstance(); 
// 获得今天是一周的第几天,正常顺序是星期日是第一天,星期一是第二天...... 
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); // 星期日是第一天 
return (dayOfWeek == 1) ? -6 : 2 - dayOfWeek; 
} 
/** 
* 获得距当前时间所在某星期的周一的日期 例: 0-本周周一日期 -1-上周周一日期 1-下周周一日期 
*  
* @param week 
*            int 
* @return java.util.Date 
*/ 
public static Date getMondayOfWeek(int week) { 
int mondayPlus = getMondayPlus(); // 相距周一的天数差 
GregorianCalendar current = new GregorianCalendar(); 
current.add(GregorianCalendar.DATE, mondayPlus + 7 * week); 
return current.getTime(); 
} 
/** 
* 获得某日前后的某一天 
*  
* @param date 
*            java.util.Date 
* @param day 
*            int 
* @return java.util.Date 
*/ 
public static Date getDay(Date date, int day) { 
GregorianCalendar c = new GregorianCalendar(); 
c.setTime(date); 
c.add(GregorianCalendar.DATE, day); 
return c.getTime(); 
} 
/** 
* 获得距当前周的前后某一周的日期 
*  
* @param week 
*            int 
* @return String[] 
*/ 
public static String[] getDaysOfWeek(int week) { 
String[] days = new String[7]; 
Date monday = getMondayOfWeek(week); // 获得距本周前或后的某周周一 
Timestamp t = new Timestamp(monday.getTime()); 
days[0] = getStrDate(t); 
for (int i = 1; i < 7; i++) { 
t = new Timestamp(getDay(monday, i).getTime()); 
days[i] = getStrDate(t); 
} 
return days; 
} 
/*** 
* MCC的UTC时间转换,MCC的UTC不是到毫秒的 
*  
* @param utc 
* @return java.util.Date 
*/ 
public static Date mccUTC2Date(long utc) { 
Date d = new Date(); 
d.setTime(utc * 1000); // 转成毫秒 
return d; 
} 
// 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss 
public static Date strToDateLong(String strDate) { 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
ParsePosition pos = new ParsePosition(0); 
Date strtodate = (Date) formatter.parse(strDate, pos); 
if (strtodate == null) { 
formatter = new SimpleDateFormat("yyyy-MM-dd"); 
strtodate = (Date) formatter.parse(strDate, pos); 
} 
return strtodate; 
} 
// 将 yyyy-MM-dd HH:mm 格式字符串转换为时间 
public static Date strToDateTime(String strDate) { 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm"); 
ParsePosition pos = new ParsePosition(0); 
Date strtodate = (Date) formatter.parse(strDate, pos); 
if (strtodate == null) { 
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
strtodate = (Date) formatter.parse(strDate, pos); 
} 
return strtodate; 
} 
// 根据输入的字符串返回日期字符串 2006-07-07 22:10 2006-07-07 
public static String getStrDate(String str) { 
if (str.length() > 10) { 
String[] string = str.trim().split(" "); 
return string[0]; 
} else { 
return getCurrentDate(); 
} 
} 
// 获取当前时间的字符串 2006-07-07 22:10:10 2006-07-07_221010 
public static String getStrDateTime() { 
Timestamp d = crunttime(); 
return d.toString().substring(0, 19).replace(":", "").replace(" ", "_"); 
} 
// 根据日期字符串,返回今天,昨天或日期 
public static String getDayOrDate(String str) { 
if (str != null && !str.equals("")) { 
if (getNextDay(str, 0).equals(getCurrentDate())) { 
str = "今天"; 
} else if (getNextDay(str, 1).equals(getCurrentDate())) { 
str = "昨天"; 
} 
} 
return str; 
} 
// 返回当前日期所在星期,2对应星期一 
public static int getMonOfWeek() { 
Calendar cal1 = Calendar.getInstance(); 
cal1.setTime(new Date()); 
return cal1.get(Calendar.DAY_OF_WEEK); 
} 
public static void main(String[] args) { 
System.out.println(System.currentTimeMillis()); 
} 
/** 
* 获取当前日期之前的日期字符串 如 2007-04-15 前5月 就是 2006-11-15 
*/ 
public static String getPreviousMonth(int month) { 
Calendar cal1 = Calendar.getInstance(); 
cal1.setTime(new Date()); 
cal1.add(Calendar.MONTH, -month); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
return formatter.format(cal1.getTime()); 
} 
public static String getStrYear(int year) { 
Calendar cal1 = Calendar.getInstance(); 
cal1.setTime(new Date()); 
cal1.add(Calendar.YEAR, -year); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy"); 
return formatter.format(cal1.getTime()) + "年份"; 
} 
/** 
* 比较两个日期前后 可以大于或等于 
*  
* @param starDate 
* @param endDate 
* @return 
*/ 
public static boolean compareTwoDays(String starDate, String endDate) { 
Calendar cal_start = Calendar.getInstance(); 
Calendar cal_end = Calendar.getInstance(); 
cal_start.setTime(parseDate(starDate)); 
cal_end.setTime(parseDate(endDate)); 
return cal_end.after(cal_start); 
} 
public static int getDaysBetween(java.util.Calendar d1, 
java.util.Calendar d2) { 
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end 
java.util.Calendar swap = d1; 
d1 = d2; 
d2 = swap; 
} 
int days = d2.get(java.util.Calendar.DAY_OF_YEAR) 
- d1.get(java.util.Calendar.DAY_OF_YEAR); 
int y2 = d2.get(java.util.Calendar.YEAR); 
if (d1.get(java.util.Calendar.YEAR) != y2) { 
d1 = (java.util.Calendar) d1.clone(); 
do { 
days += d1.getActualMaximum(java.util.Calendar.DAY_OF_YEAR); 
d1.add(java.util.Calendar.YEAR, 1); 
} while (d1.get(java.util.Calendar.YEAR) != y2); 
} 
return days; 
} 
// 得到两个日期之间的年 
public static int dateDiffYear(String starDate, String endDate) { 
int result = 0; 
Calendar d1 = Calendar.getInstance(); 
Calendar d2 = Calendar.getInstance(); 
d1.setTime(parseDate(starDate)); 
d2.setTime(parseDate(endDate)); 
// 日期大小翻转 
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end 
java.util.Calendar swap = d1; 
d1 = d2; 
d2 = swap; 
} 
int yy = d2.get(Calendar.YEAR) - d1.get(Calendar.YEAR); 
int mm = d2.get(Calendar.MONTH) - d1.get(Calendar.MONTH); 
if (mm < 0) { 
result = yy - 1; 
} 
if (mm > 0) { 
result = yy; 
} 
if (mm == 0) { 
if ((d2.getTimeInMillis() - d1.getTimeInMillis()) >= 0) { 
result = yy; 
} else { 
result = yy - 1; 
} 
} 
return result; 
} 
// 获取年龄 
public static int getAgeByBirth(String starDate) { 
return dateDiffYear(starDate, getCurrentDate()); 
} 
}

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/10177.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论