java时间日期工具类_java日期处理工具类

java日期处理工具类

import java.text.DecimalFormat;

import java.text.ParsePosition;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

import java.util.Locale;

import java.util.Random;

import java.util.StringTokenizer;

import java.util.Vector;

public class DateUtil

{

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

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

public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

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

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

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

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

public static final String DEFAULT_PRECISION_MILLTIME_FORMAT = "yyyy:MM:dd HH:mm:ss:SSS";

public static final String DEFAULT_HOUR_DATE_FORMAT = "MM-dd-yyyy HH";

public static final String ZH_HOUR_DATE_FORMAT = "yyyy-MM-dd HH";

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

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

public static final String ZH_SECOND_DATE_FORMAT = "yyyyMMddHHmmss";

/**

* 日期时间格式1-"yyyy.MM.dd HH:mm:ss"

*/

public static final String TIMEFORMAT_FULL = "yyyy.MM.dd HH:mm:ss";

/**

* 日期时间格式2-"yyyy.MM.dd HH:mm"

*/

public static final String TIMEFORMAT_NO_SEC = "yyyy.MM.dd HH:mm";

/**

* 日期格式1-"yyyy.MM.dd"

*/

public static final String TIMEFORMAT_NO_TIME = "yyyy.MM.dd";

/**

* 日期格式2-"yyyy.MM"

*/

public static final String TIMEFORMAT_YEAR_MONTH_ONLY = "yyyy.MM";

/**

* 日期格式3-"yyyyMMdd"

*/

public static final String TIMEFORMAT_ANOTHER_DATE = "yyyyMMdd";

/**

* 1024以内的素数表,172个

*/

public static int sNumprime[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,

79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191,

193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311,

313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439,

443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577,

587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709,

719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857,

859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009,

1013, 1019, 1021 };

/**

* 构造函数

*/

public DateUtil()

{

}

/**

* 按日期时间格式1返回当前时间 yyyy.MM.dd HH:mm:ss

*

* @return String 获得当前时间

*/

public static String getCurrentDateTime()

{

SimpleDateFormat sdf = new SimpleDateFormat(TIMEFORMAT_FULL);

return sdf.format(new Date());

}

public static String getCurrentDateTime_14()

{

SimpleDateFormat sdf = new SimpleDateFormat(ZH_SECOND_DATE_FORMAT);

return sdf.format(new Date());

}

/**

* 按日期格式1返回当前日期

*

* @return String 获得当前日期

*/

public static String getCurrentDate()

{

SimpleDateFormat sdf = new SimpleDateFormat(TIMEFORMAT_NO_TIME, Locale.US);

return sdf.format(new Date());

}

/**

* 按日期格式3返回数字日期

*

* @return String 获得数字日期

*/

public static String getPiciDate()

{

SimpleDateFormat sdf = new SimpleDateFormat(TIMEFORMAT_ANOTHER_DATE, Locale.US);

return sdf.format(new Date());

}

/**

* 按日期格式3返回数字日期

*

* @param sNowDateTime 设置时间,格式为YYYYMMDDHH24MISS

*/

public static void setCurrentDate(String sNowDateTime)

{

if (sNowDateTime.length() == 14)

{

int iyear;

int imonth;

int idate;

int ihour;

int iminute;

int isecond;

iyear = java.lang.Integer.parseInt(sNowDateTime.substring(0, 4));

if (iyear 

{

iyear = 2003;

}

imonth = java.lang.Integer.parseInt(sNowDateTime.substring(4, 6));

if (imonth > 12)

{

imonth = 11;

}

idate = java.lang.Integer.parseInt(sNowDateTime.substring(6, 8));

if (idate > 31)

{

idate = 11;

}

ihour = java.lang.Integer.parseInt(sNowDateTime.substring(8, 10));

if (ihour > 23)

{

ihour = 11;

}

iminute = java.lang.Integer.parseInt(sNowDateTime.substring(10, 12));

if (iminute > 59)

{

iminute = 11;

}

isecond = java.lang.Integer.parseInt(sNowDateTime.substring(12, 14));

if (isecond > 59)

{

isecond = 11;

}

Calendar serverNow = Calendar.getInstance();

serverNow.set(iyear, imonth, idate, ihour, iminute, isecond);

}

}

/**

* Function name: sGetAddTimes Description: 给一个时间增加上一定的时间

*

* @param timePoint 计时时间点(格式:TimeFormat1)

* @param addSeconds times to add(单位:秒)

* @return String 返回增加时间后的时间(格式:TimeFormat1)

*/

public static String sGetAddTimes(String timePoint, long addSeconds)

{

if (timePoint.length() == 19)

{

String dRet = "";

SimpleDateFormat sdf = new SimpleDateFormat(TIMEFORMAT_FULL);

Date timePoints = sdf.parse(timePoint, new java.text.ParsePosition(0));

Date dateTimes = new Date((timePoints.getTime() / 1000L + (addSeconds)) * 1000L);

dRet = sdf.format(dateTimes);

return dRet;

}

else

{

return "";

}

}

/**

* Function name: sGetAddTimes Description: 给一个时间减去上一定的时间

*

* @param timePoint 计时时间点(格式:TimeFormat1)

* @param addSeconds times to add(单位:秒)

* @return String 返回减去时间后的时间(格式:TimeFormat1)

*/

public static String sGetMinusTimes(String timePoint, long minusSeconds)

{

if (timePoint.length() == 19)

{

String dRet = "";

SimpleDateFormat sdf = new SimpleDateFormat(TIMEFORMAT_FULL);

Date timePoints = sdf.parse(timePoint, new java.text.ParsePosition(0));

Date dateTimes = new Date((timePoints.getTime() / 1000L - (minusSeconds)) * 1000L);

dRet = sdf.format(dateTimes);

return dRet;

}

else

{

return "";

}

}

/**

* Function name: lTimeCompare Description: 两时间比较. Compare two times

*

* @param compTime1 比较时间1(格式:TimeFormat1)

* @param compTime2 比较时间2(格式:TimeFormat1)

* @return long 返回相差的时间(单位:秒)

*/

public static long lTimeCompare(String compTime1, String compTime2)

{

if ((compTime1.length() == 19) && (compTime2.length() == 19))

{

long iReturn = -1;

SimpleDateFormat sdf = new SimpleDateFormat(TIMEFORMAT_FULL);

Date dateTime1 = sdf.parse(compTime1, new java.text.ParsePosition(0));

Date dateTime2 = sdf.parse(compTime2, new java.text.ParsePosition(0));

iReturn = dateTime2.getTime() / 1000L - dateTime1.getTime() / 1000L;

return iReturn;

}

else

{

return 0;

}

}

/**

* Function name: lTimeCompareNow Description: 与当前时间比较. Compare one time

* with now

*

* @param compTime1 比较时间1(格式:TimeFormat1)

* @return long 返回相差的时间(单位:秒)

*/

public static long lTimeCompareNow(String compTime1)

{

if (compTime1 != null && compTime1.equals("999"))

{

return -1;

}

if (compTime1.length() == 19 || compTime1.length() == 10)

{

long iReturn = -1;

if (compTime1.length() == 10)

{

compTime1 += " 00:00:00";

}

SimpleDateFormat sdf = new SimpleDateFormat(TIMEFORMAT_FULL);

Date dateTime1 = sdf.parse(compTime1, new java.text.ParsePosition(0));

iReturn = java.lang.System.currentTimeMillis() / 1000L - dateTime1.getTime() / 1000L;

return iReturn;

}

else

{

return 0;

}

}

/**

* Function name: fmtDate Description: 日期字符串规范化. format a date string using

* comm

*

* @param sDate 要规范的日期字符串(如2003-11-11、2003/11/11)

* @param comm 日期字符串中间的分隔符

* @return String 返回规范化后的字符串

*/

public static String fmtDate(String sDate, String comm)

{

String dRet = "";

if (sDate.length() == 10)

{

}

else

{

sDate = getCurrentDate();

}

dRet = sDate.substring(0, 4) + comm + sDate.substring(5, 7) + comm + sDate.substring(8, 10);

return dRet;

}

/**

* Function name: fmtDateTime Description: 日期时间字符串规范化. format a date string

* using comm

*

* @param sDate 要规范的日期时间字符串(如2003-11-11 11:11:11、2003/11/11 11:11:11)

* @param comm 日期中间的分隔符

* @return String 返回规范化后的字符串

*/

public static String fmtDateTime(String sDate, String comm)

{

String dRet = "";

if (sDate.length() == 19)

{

}

else

{

sDate = getCurrentDateTime();

}

dRet = sDate.substring(0, 4) + comm + sDate.substring(5, 7) + comm + sDate.substring(8, 10) + " "

+ sDate.substring(11, 13) + ":" + sDate.substring(14, 16) + ":" + sDate.substring(17, 19);

return dRet;

}

/**

* Function Name: SubStr Description: 取指定长度的字符子串,超过取到串尾

*

* @param fullString 源字符串

* @param nStart 开始字节

* @param nLen 要取的长度

* @return String 返回目的字符串

*/

public static String subStr(String fullString, int nStart, int nLen)

{

String sResult = "";

if ((nStart + nLen) > fullString.length())

{

sResult = fullString.substring(nStart);

}

else

{

sResult = fullString.substring(nStart, (nStart + nLen));

}

return sResult;

}

/**

* Function Name: DevideStr Description: 分解字符串

*

* @param fullString 源字符串

* @param sComm 字符串中间的分隔符

* @return Vector 返回分解后的字符串列

*/

public static Vector devideStr(String fullString, String sComm)

{

Vector vTmp = new Vector();

try

{

if (sComm.length() > 1)

{

sComm = sComm.substring(0, 1);

}

StringTokenizer stString = new StringTokenizer(fullString, sComm);

while (stString.hasMoreTokens())

{

vTmp.addElement(stString.nextToken());

}

}

catch (Exception e)

{

vTmp.clear();

}

return vTmp;

}

/**

* Function Name: DivideCSV Description: 分解CSV格式字符串

*

* @param fullString 源字符串

* @param sComm 字符串中间的分隔符

* @return Vector 返回分解后的字符串列

* @see #devideStr(String, String) deprecated 由DevideStr(String,

*      String)函数替代,该函数不再使用。

*/

public static Vector divideCSV(String fullString, String sComm)

{

Vector vTmp = new Vector();

if (sComm.length() > 1)

{

sComm = sComm.substring(0, 1);

}

StringTokenizer stString = new StringTokenizer(fullString, sComm);

while (stString.hasMoreTokens())

{

vTmp.addElement(stString.nextToken());

}

return vTmp;

}

/**

* Function Name: GenRandom Description: 随机数产生程序

*

* @param nIn 随机数种子

* @param nLen 随机数长度

* @return String 返回随机数

*/

public static String genRandom(int nIn, int nLen)

{

int nYear;

int nMonth;

int nDay;

int nHour;

int nSec;

int nMsec;

double f1;

double f2;

long temp;

int count;

int loopCount;

int i;

int rest;

String sResult = "";

String sFull = "";

if (nLen > 9)

{

loopCount = nLen / 9;

for (i = 1; i <= loopCount; i++)

{

sResult = sResult + genRandom(i, 9);

}

rest = nLen - loopCount * 9;

if (rest != 0)

{

sResult = sResult + genRandom(1, rest);

}

}

else

{

if (nLen == 0)

{

return "";

}

sFull = "";

for (count = 1; count <= nLen; count++)

{

sFull = sFull + "0";

}

DecimalFormat nf = new DecimalFormat(sFull);

Calendar nowTime = Calendar.getInstance();

nYear = nowTime.get(Calendar.YEAR);

nMonth = nowTime.get(Calendar.MONTH) + 1;

nDay = nowTime.get(Calendar.DAY_OF_MONTH);

nHour = nowTime.get(Calendar.HOUR_OF_DAY);

nSec = nowTime.get(Calendar.SECOND);

nMsec = nowTime.get(Calendar.MILLISECOND);

f2 = Math.sin(Math.sqrt((nIn % 713) + nMsec + nSec * 34 + nHour * 47) + nMsec * nSec * nHour);

f1 = Math.pow((Math.abs(f2 * 89 + 79 * Math.cos(nIn + nMsec * nSec)) * 31), 2);

temp = (long) f1 + nIn + nYear + nMonth * 11 + nDay;

StringBuffer stemp = new StringBuffer((new java.lang.Long(temp)).toString());

stemp = stemp.reverse();

Random rd = new Random();

rd.setSeed(java.lang.Long.parseLong(stemp.toString()) + (nIn % 3));

sResult = nf.format(rd.nextInt((int) (Math.pow(10, nLen) - 1)));

}

return sResult;

}

/**

* Function Name: VarlenRnd Description: 取可变长随机数,长度范围由参数指定

*

* @param minLen 最小长度

* @param maxLen 最大长度

* @return String 返回随机数

*/

public static String varlenRnd(int minLen, int maxLen)

{

String sResult = "";

if (minLen 

{

int nLen = java.lang.Integer.parseInt(genRandom(3, 1)) % (maxLen - minLen + 1) + minLen;

sResult = genRandom(3, nLen);

}

else

{

sResult = genRandom(3, maxLen);

}

return sResult;

}

/**

* BCD码左对齐转字符串

*

* @param bcd 你一次读进的字节数,因为可能会大于你要处理的字节数

* @param begin 字节开始位置

* @param length 字节长,与begin一起决定真正要处理的字节数

* @return String 返回对齐后字符串

*/

public static String bcd2Str(byte[] bcd, int begin, int length)

{

String str = "";

int temp;

for (int i = begin; i 

{

if (bcd[i] == 0)

{

break;

}

temp = (bcd[i] & 0x0F) % 10;

str += temp;

temp = (bcd[i] >>> 4) % 10;

if (bcd[i] >>> 4 != 0)

{

str += temp;

}

}

return str;

}

/**

* 普通的二进制转字串

*

* @param hex 你一次读进的字节数,因为可能会大于你要处理的字节数

* @param begin 字节开始位置

* @param num 字节长,与begin一起决定真正要处理的字节数

* @return String 返回转换后字符串

*/

public static String hex2Str(byte[] hex, int begin, int num)

{

String overflow = "overflow";

long ll = 0;

if (num > 8)

{

return overflow;

}

for (int i = begin; i 

{

ll = ll * 256 + hex[i];

}

return String.valueOf(ll);

}

/**

* 获取日期的年份

*

* @param d 日期

* @return 年份

*/

public static int getYear(Date d)

{

GregorianCalendar cal = new GregorianCalendar();

if (d != null)

{

cal.setTime(d);

return cal.get(Calendar.YEAR);

}

else

{

return 1900;

}

}

/**

* 获取日期的月份

*

* @param d 日期

* @return 月份

*/

public static int getMonth(Date d)

{

GregorianCalendar cal = new GregorianCalendar();

if (d != null)

{

cal.setTime(d);

return cal.get(Calendar.MONTH) + 1;

}

else

{

return 1;

}

}

/**

* 获取日期的天

*

* @param d 日期

* @return 天

*/

public static int getDay(Date d)

{

GregorianCalendar cal = new GregorianCalendar();

if (d != null)

{

cal.setTime(d);

return cal.get(Calendar.DAY_OF_MONTH);

}

else

{

return 1;

}

}

/**

* 获取日期的小时

*

* @param d 日期

* @return 小时

*/

public static int getHour(Date d)

{

GregorianCalendar cal = new GregorianCalendar();

if (d != null)

{

cal.setTime(d);

return cal.get(Calendar.HOUR_OF_DAY);

}

else

{

return 0;

}

}

/**

* 获取日期的分

*

* @param d 日期

* @return 分

*/

public static int getMinute(Date d)

{

GregorianCalendar cal = new GregorianCalendar();

if (d != null)

{

cal.setTime(d);

return cal.get(Calendar.MINUTE);

}

else

{

return 0;

}

}

/**

* 获取日期的秒

*

* @param d 日期

* @return 秒

*/

public static int getSecond(Date d)

{

GregorianCalendar cal = new GregorianCalendar();

if (d != null)

{

cal.setTime(d);

return cal.get(Calendar.SECOND);

}

else

{

return 0;

}

}

/**

* 获取日期的毫秒

*

* @param d 日期

* @return 毫秒

*/

public static int getMilliSecond(Date d)

{

GregorianCalendar cal = new GregorianCalendar();

if (d != null)

{

cal.setTime(d);

return cal.get(Calendar.MILLISECOND);

}

else

{

return 0;

}

}

/**

* 转换日期为MM-dd-yyyy HH:mm:ss格式的字符串

*

* @param d 日期

* @return 字符串

*/

public static String toString(Date d)

{

if (d == null)

{

return null;

}

return toString(d, DEFAULT_DATETIME_FORMAT);

}

/**

* 转换日期为指定格式的字符串

*

* @param date 日期

* @param format 指定格式

* @return 字符串

*/

public static String toString(Date date, String format)

{

if (date == null)

{

return "";

}

if ((format == null) || (format.length() == 0))

{

return "";

}

SimpleDateFormat formatter = new SimpleDateFormat(format);

return formatter.format(date);

}

/**

* 转换日期为指定区域内指定格式的字符串

*

* @param date 日期

* @param format 指定格式

* @param locale 指定区域

* @return 字符串

*/

public static String toString(Date date, String format, Locale locale)

{

if (date == null)

{

return "";

}

if ((format == null) || (format.length() == 0))

{

return "";

}

if (locale == null)

{

return "";

}

SimpleDateFormat formatter = new SimpleDateFormat(format, locale);

return formatter.format(date);

}

/**

* 转换字符串为日期

*

* @param s 字符串

* @return 日期

*/

public static Date toDate(String s)

{

if ((s == null) || (s.length() == 0))

{

return null;

}

return toDate(s, DEFAULT_DATETIME_FORMAT);

}

/**

* 转换字符串为指定格式的日期

*

* @param s 字符串

* @param format 指定格式

* @return 日期

*/

public static Date toDate(String s, String format)

{

if ((s == null) || (s.length() == 0))

{

return null;

}

if ((format == null) || (format.length() == 0))

{

return null;

}

SimpleDateFormat formatter = new SimpleDateFormat(format);

ParsePosition pos = new ParsePosition(0);

Date d = formatter.parse(s, pos);

return d;

}

/**

* 转换字符串为指定区域内指定格式的日期

*

* @param s 字符串

* @param format 指定格式

* @param locale 指定区域

* @return 日期

*/

public static Date toDate(String s, String format, Locale locale)

{

Locale loc;

if ((s == null) || (s.length() == 0))

{

return null;

}

if ((format == null) || (format.length() == 0))

{

return null;

}

if (locale == null)

{

loc = Locale.getDefault();

}

else

{

loc = locale;

}

SimpleDateFormat formatter = new SimpleDateFormat(format, loc);

ParsePosition pos = new ParsePosition(0);

Date d = formatter.parse(s, pos);

return d;

}

/**

* 判断字符串是否为日期

* @param s 字符串

* @return 是否为日期

*/

public static boolean isDate(String s)

{

Date date = toDate(s);

if (date == null)

{

return false;

}

String str = toString(date);

return str.equalsIgnoreCase(s);

}

/**

* 判断字符串是否为指定格式日期

* @param s 字符串

* @param format 指定格式

* @return 是否为日期

*/

public static boolean isDate(String s, String format)

{

Date date = toDate(s, format);

if (date == null)

{

return false;

}

String str = toString(date, format);

return str.equalsIgnoreCase(s);

}

/**

* 判断字符串是否为指定区域内指定格式日期

* @param s 字符串

* @param format 指定格式

* @param locale 指定区域

* @return 是否为日期

*/

public static boolean isDate(String s, String format, Locale locale)

{

Date date = toDate(s, format, locale);

if (date == null)

{

return false;

}

String str = toString(date, format, locale);

return str.equalsIgnoreCase(s);

}

/**

* 比较两日期是否相等

* @param d0 日期0

* @param d1 日期1

* @return 是否相等

*/

public static boolean compare(Date d0, Date d1)

{

if (d0 == null && d1 == null)

{

return true;

}

if (d0 == null || d1 == null)

{

return false;

}

else

{

return d0.getTime() == d1.getTime();

}

}

/**

* 将日期转换为YYYYMMDDHHMISS类型的方法

*

* @param d Date

* @return String

*/

public static String toDate(Date d)

{

return toString(d, ZH_SECOND_DATE_FORMAT);

}

/**

* 将日期类型转换为微秒级别的字符串,格式为yyyy:MM:dd HH:mm:ss:SSS

*

* @param d Date

* @return String

*/

public static String toDateOfMilliSecond(Date d)

{

return toString(d, DEFAULT_PRECISION_MILLTIME_FORMAT);

}

/**

* 返回某日期增减指定月数后的新值

*

* @param oldDate 旧日期,格式:yyyyMMddHHmmss

* @param valve 增减月数

* @return 新日期,格式:yyyyMMddHHmmss

*/

public static String getDateByAddMonth(String oldDate, int valve)

{

Calendar calendar = Calendar.getInstance();

calendar.setTime(toDate(oldDate, ZH_SECOND_DATE_FORMAT));

calendar.add(Calendar.MONTH, valve);

return DateUtil.toDate(calendar.getTime());

}

/**

* 计算增加年份后新的日期的值

*

* @param oldDate 之前的日期,精确到秒级,字符串类型,如20060901235959

* @param valve 阀值

* @return 新日期

*/

public static String getDateByAddYear(String oldDate, int valve)

{

int year = Integer.parseInt(oldDate.substring(0, 4));

String newDate = null;

newDate = String.valueOf(year + valve) + oldDate.substring(4, oldDate.length());

return newDate;

}

/**

* 计算增加日期后新的日期的值。

*

* @param oldDate 之前的日期,精确到秒级,字符串类型,如20060901235959

* @param valve 阀值

* @return 新日期

*/

public static String getDateByAddDay(String oldDate, int valve)

{

Date a = toDate(oldDate, ZH_SECOND_DATE_FORMAT);

long b = a.getTime();

long c = b + valve * 24 * 60 * 60 * 1000;

Date d = new Date(c);

return toDate(d);

}

/**

* 计算增加小时后新的日期的值。

*

* @param oldDate 之前的日期,精确到秒级,字符串类型,如20060901235959

* @param valve 阀值

* @return 新日期

*/

public static String getDateByAddHour(String oldDate, int valve)

{

Date a = toDate(oldDate, ZH_SECOND_DATE_FORMAT);

long b = a.getTime();

long c = b + valve * 60 * 60 * 1000;

Date d = new Date(c);

return toDate(d);

}

/**

* 计算增加分钟后新的日期的值。

*

* @param oldDate 之前的日期,精确到秒级,字符串类型,如20060901235959

* @param valve 阀值

* @return 新日期

*/

public static String getDateByAddMinute(String oldDate, int valve)

{

Date a = toDate(oldDate, ZH_SECOND_DATE_FORMAT);

long b = a.getTime();

long c = b + valve * 60 * 1000;

Date d = new Date(c);

return toDate(d);

}

/**

* 计算增加秒钟后新的日期的值。

*

* @param oldDate 之前的日期,精确到秒级,字符串类型,如20060901235959

* @param valve 阀值

* @return 新日期

*/

public static String getDateByAddSecond(String oldDate, int valve)

{

Date a = toDate(oldDate, ZH_SECOND_DATE_FORMAT);

long b = a.getTime();

long c = b + valve * 1000;

Date d = new Date(c);

return toDate(d);

}

/**

* 取得当前时间 falg=0 格式为:yyyy.MM.dd HH:mm:ss falg=1 格式为:mm

*

* @param flag 标志

* @return 当前时间

*/

public static String getTime(int flag)

{

java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy.MM.dd HH:mm:ss");

String operTime = formatter.format(new java.util.Date());

String sMoth = operTime.substring(5, 7);

if (flag == 0)

{

return operTime;

}

else

{

return sMoth;

}

}

/**

* 判断是否是闰年

* @param year 年份

* @return 是否是闰年

*/

public static boolean isLeapYear(int year)

{

if (year 

{

return false;

}

if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))

{

return true;

}

else

{

return false;

}

}

/**

* 把传进来的 日期+时间 格式填充。把时间的 时、分、秒的数字填充为2位。不足2位的前面补0

*

* @param datetime 日期

* @return 补充后的日期

*/

public static String fillDateTime(String datetime)

{

if (datetime == null || datetime.trim().length() == 0)

{

return "";

}

String[] ary = datetime.split(" ");

if (ary == null || ary.length != 2)

{ //这里对日期时间不做合法性检查。设定该日期时间都是合法的。

//简单的检查下,如果格式不合法,直接返回空字符串

return "";

}

//这里暂时对日期格式不做转换,只对时间格式做转换

String time = fillTime(ary[1]);

if (time.trim().length() == 0)

{//如果时间格式转换错误,则返回空字符串

return "";

}

String date = fillDate(ary[0].replaceAll("\\.", "-"));

if (date.trim().length() == 0)

{

return "";

}

return date + " " + time;

}

/**

* 填充日期

* @param date 日期

* @return 日期

*/

public static String fillDate(String date)

{

if (date == null || date.length() == 0)

{

return "";

}//2009-9-9

String[] ary = date.split("-");

if (ary.length != 3 || ary[1] == null || ary[1].trim().length() == 0 || ary[2] == null

|| ary[2].trim().length() == 0 || (ary[1].trim().length() != 1 && ary[1].trim().length() != 2)

|| (ary[2].trim().length() != 1 && ary[2].trim().length() != 2))

{

return "";

}

if (ary[1].length() == 1)

{

ary[1] = "0" + ary[1];

}

if (ary[2].length() == 1)

{

ary[2] = "0" + ary[2];

}

return ary[0] + "-" + ary[1] + "-" + ary[2];

}

/**

* 填充时间格式. 把时间的 时、分、秒的数字填充为2位。不足2位的前面补0 转换后的格式为: HH:mm:ss

*

* @param time 日期

* @return 日期

*/

public static String fillTime(String time)

{

//这里对时间的合法性不做检查

if (time == null)

{

return "";

}

time = time.trim();

if (time.equals(""))

{

return "";

}

String[] timesplit = time.split(":", 3);

if (timesplit.length != 3)

{

return "";

}

if (timesplit[0] == null || timesplit[1] == null || timesplit[2] == null)

{

return "";

}

String shour = timesplit[0].trim();

String sminute = timesplit[1].trim();

String ssecond = timesplit[2].trim();

if (shour.equals("") || sminute.equals("") || ssecond.equals(""))

{

return "";

}

if (shour.length() == 1)

{

shour = "0" + shour;

}

if (sminute.length() == 1)

{

sminute = "0" + sminute;

}

if (ssecond.length() == 1)

{

ssecond = "0" + ssecond;

}

return shour + ":" + sminute + ":" + ssecond;

}

/**

* 检测输入字符串是否是时间格式 HH:mm:dd

*

* @param s 日期

* @return 是否是时间格式

*/

public static boolean checkTimeFormat(String s)

{

if (s == null)

{

return false;

}

s = s.trim();

if (s.equals(""))

{

return false;

}

String[] timesplit = s.split(":", 3);

if (timesplit.length != 3)

{

return false;

}

if (timesplit[0] == null || timesplit[1] == null || timesplit[2] == null)

{

return false;

}

String shour = timesplit[0].trim();

String sminute = timesplit[1].trim();

String ssecond = timesplit[2].trim();

if (shour.equals("") || sminute.equals("") || ssecond.equals(""))

{

return false;

}

try

{

int ihour = Integer.parseInt(shour);

if (shour.trim().length() != 2 && shour.trim().length() != 1)

{

return false;

}

if (ihour > 23 || ihour 

{

return false;

}

if (sminute.trim().length() != 2 && sminute.trim().length() != 1)

{

return false;

}

int iminute = Integer.parseInt(sminute);

if (iminute  59)

{

return false;

}

if (ssecond.trim().length() != 2 && ssecond.trim().length() != 1)

{

return false;

}

int isecond = Integer.parseInt(ssecond);

if (isecond  59)

{

return false;

}

}

catch (Exception e)

{

return false;

}

return true;

}

/**

* 检测输入字符串是否是 日期+时间 格式,包括闰年检测

* @param s 日期

* @return 是否是日期+时间 格式

*/

public boolean checkDateTimeFormat(String s)

{

if (s == null)

{

return false;

}

s = s.trim();

if (s.equals(""))

{

return false;

}

String[] dtparts = s.split(" ", 2);

if (dtparts.length != 2)

{

return false;

}

String dateparts = dtparts[0];

String timeparts = dtparts[1];

return checkDateFormat(dateparts) && checkTimeFormat(timeparts);

}

/**

* 检测输入字符串是否是日期格式yyyy-MM-dd,包括闰年检测

* @param s 日期

* @return 是否是日期格式yyyy-MM-dd

*/

public static boolean checkDateFormat(String s)

{

if (s == null)

{

return false;

}

s = s.trim();

if (s.equals(""))

{

return false;

}

String[] dts = s.split("-");

if (dts.length != 3)

{

return false;

}

if (dts[0].length() != 4)

{

return false;

}

if ((dts[1].length() != 1 && dts[1].length() != 2))

{

return false;

}

if (dts[2].length() != 1 && dts[2].length() != 2)

{

return false;

}

int year = 0;

int month = 0;

int day = 0;

int days = 0;

try

{

year = Integer.valueOf(dts[0]);

if (year > 10000 || year 

{

return false;

}

}

catch (Exception e)

{

return false;

}

try

{

month = Integer.valueOf(dts[1]);

if (month  12)

{

return false;

}

}

catch (Exception e)

{

return false;

}

try

{

day = Integer.valueOf(dts[2]);

switch (month)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

days = 31;

break;

case 4:

case 6:

case 9:

case 11:

days = 30;

break;

case 2:

if (isLeapYear(year))

{

days = 29;

}

else

{

days = 28;

}

default:

}

if (day > days || day 

{

return false;

}

}

catch (Exception e)

{

return false;

}

return true;

}

/**

* 把字符串转换成 日期

* @param strdate 字符串日期

* @return 日期

*/

public Date stringParsetoDate(String strdate)

{

if (strdate == null || strdate.trim().equals(""))

{

return null;

}

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

try

{

return sdf.parse(strdate);

}

catch (Exception e)

{

return null;

}

}

/**

* 把字符串转换成 日期时间

* @param str 字符串日期

* @return 日期

*/

public Date strToDateTime(String str)

{

if (str == null || str.trim().equals(""))

{

return null;

}

java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try

{

return sdf.parse(str);

}

catch (Exception e)

{

return null;

}

}

/**

* 从字符串中得到月份

* @param datestr 字符串日期

* @return 月份

*/

public int getMonthfromStr(String datestr)

{

int month = 0;

if (datestr == null || datestr.trim().equals(""))

{

return month;

}

String[] splitedate = datestr.split("-");

try

{

month = Integer.parseInt(splitedate[1].trim());

if (month  12)

{

return 0;

}

}

catch (Exception e)

{

e.printStackTrace();

return 0;

}

return month;

}

/**

* 把给定日期减去N个月,返回一个Date

* @param date 给定日期

* @param nMonth 月数

* @return Date

* @throws Exception 抛出的异常

*/

public Date minusMonth(Calendar date, int nMonth) throws Exception

{

date.add(Calendar.MONTH, -nMonth);

SimpleDateFormat spdf = new SimpleDateFormat("yyyy-MM-dd");

return spdf.parse(spdf.format(date.getTime()));

}

}

©著作权归作者所有:来自51CTO博客作者lindianlide的原创作品,如需转载,请注明出处,否则将追究法律责任

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.hexiang.utils; import java.text.SimpleDateFormat; import java.util.*; public class CalendarUtil { public static void main(String args[]) { System.out.println("First day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByWeek(new Date()))); System.out.println("Last day of week is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByWeek(new Date()))); System.out.println("First day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getFirstDateByMonth(new Date()))); System.out.println("Last day of month is : " + new SimpleDateFormat("yyyy-MM-dd") .format(getLastDateByMonth(new Date()))); } /** * 获得所在星期的第一天 */ public static Date getFirstDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 now.set(Calendar.DATE, first_day_of_week); return now.getTime(); } /** * 获得所在星期的最后一天 */ public static Date getLastDateByWeek(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); int today = now.get(Calendar.DAY_OF_WEEK); int first_day_of_week = now.get(Calendar.DATE) + 2 - today; // 星期一 int last_day_of_week = first_day_of_week + 6; // 星期日 now.set(Calendar.DATE, last_day_of_week); return now.getTime(); } /** * 获得所在月份的最后一天 * @param 当前月份所在的时间 * @return 月份的最后一天 */ public static Date getLastDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.MONTH, now.get(Calendar.MONTH) + 1); now.set(Calendar.DATE, 1); now.set(Calendar.DATE, now.get(Calendar.DATE) - 1); now.set(Calendar.HOUR, 11); now.set(Calendar.MINUTE, 59); now.set(Calendar.SECOND, 59); return now.getTime(); } /** * 获得所在月份的第一天 * @param 当前月份所在的时间 * @return 月份的第一天 */ public static Date getFirstDateByMonth(Date date) { Calendar now = Calendar.getInstance(); now.setTime(date); now.set(Calendar.DATE, 0); now.set(Calendar.HOUR, 12); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); return now.getTime(); } }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值