Java date相关 格式化(一)

在项目开发中,经常会使用到Date格式化工具类,然后就是相互转换,记录一下,以备不时之需

public class DateTimeUtils {

public static final String DATE_FORMAT = "yyyy-MM-dd";

public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

public static final String DATETIME_FORMATFORRECORD = "YYYYMMDDhhmmss";

public static final String DATETIME_INEX_FORMAT = "YYMMDD";

private DateTimeUtils() {
}

public static String getCurrentYearStr() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String strDate = sdf.format(date);
return strDate;
}

public static String getCurrentMonthStr() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM");
String strDate = sdf.format(date);
return strDate;
}

public static String getCurrentDayStr() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("dd");
String strDate = sdf.format(date);
return strDate;
}

public static String getCurrentHourStr() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HH");
String strDate = sdf.format(date);
return strDate;
}

public static int getCurrentHourInt() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HH");
String strDate = sdf.format(date);
int intHour = Integer.parseInt(strDate);
return intHour;
}

public static String getCurrentDateStr(String dateFormat) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String strDate = sdf.format(date);
return strDate;
}

public static String getChineseCurrentDateStr(){
String year = getCurrentYearStr();
String month = getCurrentMonthStr();
String day = getCurrentDayStr();
String dateStr = year + "年" + month + "月" + day + "日";
return dateStr;
}

//英文月份 format:yy-MM-dd
public static String getEnglishMonthCurrentDateStr(String dateFormat){
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String str = sdf.format(date);
String[] strArr = str.split("-");
String month = strArr[1];
SimpleDateFormat sdf2 = new SimpleDateFormat("MM");
Date date2 = null;
try {
date2 = sdf2.parse(month);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sdf2 = new SimpleDateFormat("MMMMM",Locale.US);
month = sdf2.format(date2);
String strDate = strArr[0] + "-" + month + "-" + strArr[2];
return strDate;
}

public static String getCurrentDateStr() {
return getCurrentDateStr(DATE_FORMAT);
}

public static String getCurrentDateTimeStr() {
return getCurrentDateStr(DATETIME_FORMAT);
}

public static Date now() {
return new Date();
}

public static String format(Date date, String pattern) {
if (date == null) {
return "";
}
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
return formatter.format(date);
}

public static String formatToDate(Date date) {
return format(date, DATE_FORMAT);
}

public static String formatToDateTime(Date date) {
return format(date, DATETIME_FORMAT);
}

public static String formatToDateTime(long date) {
Date tempDate = new Date(date);
return formatToDateTime(tempDate);
}

public static Date parse(String dateString, String pattern) {
if (dateString == null || dateString.trim().length() == 0) {
return null;
}
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
try {
return formatter.parse(dateString);
} catch (ParseException ex) {
throw new IllegalArgumentException("Illegal datetime string "
+ dateString);
}
}

public static Date parseDate(String dateString) {
return parse(dateString, DATE_FORMAT);
}

public static Date parseDateTime(String dateString) {
return parse(dateString, DATETIME_FORMAT);
}

// ============================================================

/**
* 计算两个时间的差值,返回以毫秒为单位的long
*/
public static long compareDate(Date date1, Date date2) {
if (date1 == null) {
long now = System.currentTimeMillis();
date1 = new Date(now);
}
if (date2 == null) {
long now = System.currentTimeMillis();
date2 = new Date(now);
}
return date1.getTime() - date2.getTime();
}

/**
* 将毫秒转换为时分秒
*/
public static String ms2HMS(long ms) {
if (ms < 0)
ms = 0 - ms;
long s = ms / 1000;
long d = s / (3600 * 24);
long h = (s - d * 3600 * 24) / 3600;
long m = (s - d * 3600 * 24 - h * 3600) / 60;
long ss = s - d * 3600 * 24 - h * 3600 - m * 60;
String returnStr = "";
if (d > 0)
returnStr = returnStr + d + "天";
if (h > 0)
returnStr = returnStr + h + "小时";
if (m > 0 && (d == 0))
returnStr = returnStr + m + "分钟";
if (returnStr.equals("") || (d == 0 && h == 0))
returnStr = returnStr + ss + "秒";
return returnStr;
}

/**
* 获取开始结束日期之间间隔的天数(startDate<endDate时返回正数,否则返回负数) 如: 2011-08-01
* 12:11:00与2011-08-10 12:10:00间隔天数(精确计算):8 2011-08-01 12:11:00与2011-08-10
* 12:11:00间隔天数(精确计算):9 2011-08-01 12:11:00与2011-08-10
* 12:10:00间隔天数(只按日期的天数相减来计算):9
*
* @param startDate
* 开始日期
* @param endDate
* 结束日期
* @param isPrecise
* 是否精确计算,否则不考虑分秒只按日期的天数相减来计算间隔
* @return
*/
public static int getIntervalDays(Date startDate, Date endDate,
boolean isPrecise) {
// 使用精确计算方法
if (isPrecise) {
long d = getIntervalSeconds(startDate, endDate);
int oneDay = 24 * 3600;
return (int) d / oneDay;
}
// 使用粗略计算方法,只使用日期的天数相减来计算,不考虑分秒
Date d1 = startDate;
Date d2 = endDate;
int flag = 1;
if (startDate.getTime() > endDate.getTime()) {
flag = -1;
d1 = endDate;
d2 = startDate;
}
Calendar cd1 = Calendar.getInstance();
cd1.setTime(d1);
int days1 = cd1.get(Calendar.DAY_OF_YEAR);
Calendar cd2 = Calendar.getInstance();
cd2.setTime(d2);
int days2 = cd2.get(Calendar.DAY_OF_YEAR);
int intervalDays = (days2 - days1) * flag;
return intervalDays;
}

/**
* 获取从开始到结束时间之间间隔的秒数(startDate<endDate时返回正数,否则返回负数,忽略毫秒)
*
* @param startDate
* @param endDate
* @return
*/
public static long getIntervalSeconds(Date startDate, Date endDate) {
return endDate.getTime() / 1000 - startDate.getTime() / 1000;
}

public static boolean isOver18(String birthdayStr){
Date birthday = DateTimeUtils.parse(birthdayStr,DATE_FORMAT);
boolean isOver18 = isOver18(birthday);
return isOver18;
}

public static boolean isOver18(Date birthday){
Date nowDate = new Date();
Calendar nowDateC = Calendar.getInstance();
nowDateC.setTime(nowDate);

Calendar birthdayC = Calendar.getInstance();
birthdayC.setTime(birthday);

int age = nowDateC.get(Calendar.YEAR) - birthdayC.get(Calendar.YEAR) -
((nowDateC.get(Calendar.MONTH) < birthdayC.get(Calendar.MONTH) || nowDateC.get(Calendar.MONTH) == birthdayC.get(Calendar.MONTH) && (nowDateC.get(Calendar.DAY_OF_MONTH) < birthdayC.get(Calendar.DAY_OF_MONTH))) ? 1 : 0);
if(age < 18){
return false;
}
return true;
}

/**
* 计算两个日期之间相差的天数
* @param smdate 较小的时间
* @param bdate 较大的时间
* @return 相差天数
*/
public static int daysBetween(Date startDate,Date endDate){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
startDate=sdf.parse(sdf.format(startDate));
endDate=sdf.parse(sdf.format(endDate));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
long time1 = cal.getTimeInMillis();
cal.setTime(endDate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);

return Integer.parseInt(String.valueOf(between_days));
}

public static int getDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int day = cal.get(Calendar.DAY_OF_WEEK)-1;
return day;
}

/**
* 日期字符串转日期
* @param dateStr
* @param pattern
* @return
*/
public static Date dateStrToDate(String dateStr, String pattern){
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = new Date();
try {
date = sdf.parse(dateStr);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return date;
}

public static void main(String[] args) {
Date date = DateTimeUtils.parse("2005-5-28 17:50:50",
"yyyy-MM-dd hh:mm:ss");
Date date1 = DateTimeUtils.parse("2005-5-28 17:50:51",
"yyyy-MM-dd hh:mm:ss");
System.out.println(date.getTime());
System.out.println(date1.getTime());
Date mydate = new Date();
System.out.println(DateTimeUtils.format(mydate, "yyyy-MM-dd hh:mm:ss"));
}
}

转载于:https://www.cnblogs.com/Yorkzhu/p/7832635.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值