package org.jcommons.common;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class DateUtils {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date1 = strToDate("2015-12-02 01:01:01", "yyyy-MM-dd HH:mm:ss");
Date date2 = strToDate("2015-01-02 01:01:03", "yyyy-MM-dd HH:mm:ss");
System.out.println(getHours(date1));
// String time = "2015-01-02 01:01:26";
// String[] timeArr = time.split(":");
// int second1 = Integer.parseInt(timeArr[timeArr.length-1].substring(1, 2));
// int second2 = Integer.parseInt(timeArr[timeArr.length-1].substring(0, 1));
// if(second1<5)
// time = time.substring(0, time.length()-2)+second2+"0";
// else
// time = time.substring(0, time.length()-2)+(second2+1)+"0";
// System.out.println(time);
}
public static String calculateTime(long start) {
return calculateTime(start, System.currentTimeMillis(),
"${d}d ${h}h${m}m${s}s");
}
public static String calculateTime(long start, String format) {
return calculateTime(start, System.currentTimeMillis(), format);
}
public static String calculateTime(long start, long end) {
return calculateTime(start, end, "${d}d ${h}h${m}m${s}s");
}
public static String calculateTime(long start, long end, String format) {
if (format == null)
format = "${d}d ${h}h${m}m${s}s";
long between = (end - start);// 得到两者的毫秒数
long d = between / (24 * 60 * 60 * 1000);
long h = (between / (60 * 60 * 1000) - d * 24);
long m = ((between / (60 * 1000)) - d * 24 * 60 - h * 60);
long s = (between / 1000 - d * 24 * 60 * 60 - h * 60 * 60 - m * 60);
return format.replace("${d}", String.valueOf(d))
.replace("${h}", String.valueOf(h))
.replace("${m}", String.valueOf(m))
.replace("${s}", String.valueOf(s));
}
public static Float toSeconds(String strTime) {
Float time = 0F;
for (String s : strTime.split(" ")) {
time += _toSeconds(s);
}
return time;
}
private static Float _toSeconds(String strTime) {
Float time = 0F;
try {
if (strTime.endsWith("s")) {
time = Float.parseFloat(strTime.replace("s", "")) * 1;
} else if (strTime.endsWith("m")) {
time = Float.parseFloat(strTime.replace("m", "")) * 60;
} else if (strTime.endsWith("h")) {
time = Float.parseFloat(strTime.replace("h", "")) * 60 * 60;
} else if (strTime.endsWith("d")) {
time = Float.parseFloat(strTime.replace("d", "")) * 60 * 60 * 24;
} else
time = Float.parseFloat(strTime);
} catch (Throwable e) {
}
return time;
}
public static long[] changeSecondsToTime(long seconds) {
long hour = seconds / 3600;
long minute = (seconds - hour * 3600) / 60;
long second = (seconds - hour * 3600 - minute * 60);
return new long[] { hour, minute, second };
}
public static int getDayOfYear(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.DAY_OF_YEAR);
}
public static int getLastDayOfYear(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.getActualMaximum(Calendar.DAY_OF_YEAR);
}
public static int getDayOfMonth(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.DAY_OF_MONTH);
}
public static int getLastDayOfMonth(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.getActualMaximum(Calendar.DAY_OF_MONTH);
}
// 判断日期为星期几,0为星期六,依此类推
public static int getDayOfWeek(Date date) {
// 首先定义一个calendar,必须使用getInstance()进行实例化
Calendar aCalendar = Calendar.getInstance();
// 里面野可以直接插入date类型
aCalendar.setTime(date);
// 计算此日期是一周中的哪一天
int x = aCalendar.get(Calendar.DAY_OF_WEEK);
return x;
}
public static int getLastDayOfWeek(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.getActualMaximum(Calendar.DAY_OF_WEEK);
}
public static long difference(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
if (cal2.after(cal1)) {
return cal2.getTimeInMillis() - cal1.getTimeInMillis();
}
return cal1.getTimeInMillis() - cal2.getTimeInMillis();
}
public static Date addSecond(Date source, int s) {
Calendar cal = Calendar.getInstance();
cal.setTime(source);
cal.add(Calendar.SECOND, s);
return cal.getTime();
}
public static Date addMinute(Date source, int min) {
Calendar cal = Calendar.getInstance();
cal.setTime(source);
cal.add(Calendar.MINUTE, min);
return cal.getTime();
}
public static Date addHour(Date source, int hour) {
Calendar cal = Calendar.getInstance();
cal.setTime(source);
cal.add(Calendar.HOUR_OF_DAY, hour);
return cal.getTime();
}
public static Date addDay(Date source, int day) {
return addDate(source, day);
}
public static Date addDate(Date source, int day) {
Calendar cal = Calendar.getInstance();
cal.setTime(source);
cal.add(Calendar.DAY_OF_MONTH, day);
return cal.getTime();
}
public static Date addMonth(Date source, int month) {
Calendar cal = Calendar.getInstance();
cal.setTime(source);
cal.add(Calendar.MONTH, month);
return cal.getTime();
}
public static Date addYear(Date source, int year) {
Calendar cal = Calendar.getInstance();
cal.setTime(source);
cal.add(Calendar.YEAR, year);
return cal.getTime();
}
public static Date parse(String format, String source) {
return parse(format, source, Locale.getDefault());
}
public static Date parse(String format, String source, Locale locale) {
int aaIndex = format.indexOf(" aa");
if (aaIndex > -1) {
String apm = source.substring(aaIndex + 1, aaIndex + 1 + 2);
format = format.replace(" aa", "");
return parse(format, source.substring(0, aaIndex), apm, locale);
}
SimpleDateFormat sdf = new java.text.SimpleDateFormat(format, locale);
try {
return sdf.parse(source);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
public static Date parse(String format, String source, String amOrPm) {
return parse(format, source, amOrPm, Locale.getDefault());
}
public static Date parse(String format, String source, String amOrPm,
Locale locale) {
SimpleDateFormat sdf = new java.text.SimpleDateFormat(format, locale);
try {
Date date = sdf.parse(source);
int HH = CommonUtils.toInt(formatTime("HH", date));
if ("PM".equalsIgnoreCase(amOrPm)) {
if (HH <= 12)
date = addHour(date, 12);
} else if ("AM".equalsIgnoreCase(amOrPm)) {
if (HH >= 12)
date = addHour(date, -12);
}
return date;
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
public static Date parse(String source) {
return parse(source, Locale.getDefault());
}
public static Date parse(String source, Locale locale) {
return parse("yyyy-MM-dd HH:mm:ss", source, locale);
}
/**
* 格式化时间 yyyy-MM-dd HH:mm:ss
*
* @param date
* @return
*/
public static String formatTime(Date date) {
return formatTime(null, date);
}
/**
* 格式化时间
*
* @param format
* 格式,默认yyyy-MM-dd HH:mm:ss
* @param date
* @return
*/
public static String formatTime(String format, Date date) {
if (format == null) {
format = "yyyy-MM-dd HH:mm:ss";
}
String time = new java.text.SimpleDateFormat(format).format(date);
return time;
}
public static Date newDate() {
return new Date();
}
public static Date newDate(String pattern, String time) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
return sdf.parse(time);
} catch (ParseException e) {
throw new RuntimeException();
}
}
public static Date strToDate(String source, String pattern) {
Date date = null;
SimpleDateFormat format = new SimpleDateFormat(pattern);
try {
date = format.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
public static String dateToStr(Date source, String pattern) {
String result = null;
SimpleDateFormat format = new SimpleDateFormat(pattern);
result = format.format(source);
return result;
}
public static String dateToStr(Date source){
String pattern = "yyyy-MM-dd HH:mm:ss";
return dateToStr(source, pattern);
}
public static String resoveTime(final String time) {
String[] array = time.split(":");
StringBuilder sb = new StringBuilder();
for (String a : array) {
if (sb.length() > 0)
sb.append(":");
if (a.length() == 1)
a = new StringBuilder("0").append(a).toString();
sb.append(a);
}
return sb.toString() + ":00";
}
public static Date resoveDate(final String date) throws Exception {
Date d = null;
try {
d = parse("yyyy-MM-dd", date);
} catch (Throwable e1) {
try {
d = parse("yyyy-M-dd", date);
} catch (Throwable e2) {
try {
d = parse("yyyy-MM-d", date);
} catch (Throwable e3) {
try {
d = parse("yyyy-M-d", date);
} catch (Throwable e4) {
try {
d = parse("MM/dd/yyyy", date);
} catch (Throwable e5) {
try {
d = parse("MM/d/yyyy", date);
} catch (Throwable e6) {
try {
d = parse("M/dd/yyyy", date);
} catch (Throwable e7) {
try {
d = parse("M/d/yyyy", date);
} catch (Throwable e8) {
throw new Exception(e8);
}
}
}
}
}
}
}
}
return d;
}
public static boolean isValidTime(String str) {
return str.matches("^\\d{2}:\\d{2}:\\d{2}$");
}
public static boolean isValidDate(String str) {
return str != null ? str
.matches("^\\d{4}(\\-|\\/|\\.)\\d{1,2}\\1\\d{1,2}$") : false;
}
public static boolean isValidDateTime(String source) {
return isValidDateTime(source, Locale.getDefault());
}
public static boolean isValidDateTime(String source, Locale locale) {
return isValidDateTime(source, "yyyy-MM-dd HH:mm:ss", locale);
}
public static boolean isValidDateTime(String source, String format) {
return isValidDateTime(source, format, Locale.getDefault());
}
public static boolean isValidDateTime(String source, String format,
Locale locale) {
try {
Date date = parse(format, source, locale);
return date != null;
} catch (Throwable e) {
return false;
}
}
public static int getYears(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.YEAR);
}
public static int getMonths(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.MONTH)+1;
}
public static int getDays(Date date, int type) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(type);
}
public static int getHours(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.HOUR_OF_DAY);
}
public static int getMinute(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.MINUTE);
}
public static int getSecond(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.SECOND);
}
public static Long getNow() {
return System.currentTimeMillis();
}
public static Long getNow(int length) {
return getTime(length, new Date());
}
public static Long getTime(int length, Date date) {
String time = String.valueOf(date.getTime()).substring(0, length);
return Long.parseLong(time);
}
/**
* @功能 取得当前时间,给定格式
* @return
*/
public static String getNowTime(String format, Locale loc) {
if (format == null) {
format = "yyyy-MM-dd HH:mm:ss";
}
if (loc == null)
return new java.text.SimpleDateFormat(format)
.format(java.util.Calendar.getInstance().getTime());
return new java.text.SimpleDateFormat(format, loc)
.format(java.util.Calendar.getInstance().getTime());
}
public static String getNowTime(String format) {
return getNowTime(format, null);
}
/**
* @功能 取得当前时间
* @return
*/
public static String getNowTime() {
return getNowTime(null);
}
}