Java開發日期工具類,分享一下

Java開發日期工具類,分享一下

package com.heivr.webapp.authority.util;

/**
 日期類
 * @date   2003-12-04
 * @version 1.0
 */

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Timer;

public class DateUtil {
	static long currentTime = 0L;
	static Timer timer = new Timer();

	public static void main(String[] args) {
		System.out.println(getPrevMonth("201312"));
	}

	/**
	 * 獲取一個月的最後一天
	 * 
	 * @param dat
	 * @return
	 */
	public static String getEndDateOfMonth(String dat) {// yyyy-MM
		String day = "";
		String month = dat.substring(5, 7);
		int mon = Integer.parseInt(month);
		if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8
				|| mon == 10 || mon == 12) {
			day = "-31";
		} else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
			day = "-30";
		} else {
			if (isLeapYear(dat)) {
				day = "-29";
			} else {
				day = "-28";
			}
		}
		return dat + day;
	}

	/**
	 * 判斷是否潤年
	 * 
	 * @param ddate
	 * @return
	 */
	public static boolean isLeapYear(String ddate) {

		/**
		 * 詳細設計: 1.被400整除是閏年,否則: 2.不能被4整除則不是閏年 3.能被4整除同時不能被100整除則是閏年
		 * 3.能被4整除同時能被100整除則不是閏年
		 */
		Date d = strToDate(ddate);
		GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
		gc.setTime(d);
		int year = gc.get(Calendar.YEAR);
		if ((year % 400) == 0)
			return true;
		else if ((year % 4) == 0) {
			if ((year % 100) == 0)
				return false;
			else
				return true;
		} else
			return false;
	}

	/**
	 * 金額整數位不足4位補0,小數位不足2位補0
	 * 
	 * @param str
	 * @return
	 */
	public static String makeZero(String str) {
		if (str.contains(".")) {
			String numstr = str.substring(0, str.lastIndexOf("."));
			String fstr = str.substring(str.lastIndexOf(".") + 1, str.length());

			StringBuffer code_numstr = new StringBuffer();
			for (int j = 0; j < 4 - numstr.length(); j++) {
				code_numstr = code_numstr.append("0");
			}
			code_numstr.append(numstr);

			StringBuffer code_fstr = new StringBuffer();
			for (int j = 0; j < 2 - fstr.length(); j++) {
				code_fstr = code_fstr.append("0");
			}

			fstr += code_fstr.toString();

			return code_numstr + "." + fstr;
		} else {
			String numstr = str.substring(0, str.lastIndexOf("."));
			StringBuffer code_numstr = new StringBuffer();
			for (int j = 0; j < str.lastIndexOf(".") - numstr.length(); j++) {
				code_numstr = code_numstr.append("0");
			}
			code_numstr = code_numstr.append(numstr);
			return code_numstr + ".00";
		}
	}

	/**
	 * 獲取業務編號
	 * 
	 * @return 返回時間類型yyyyMMddHHmmss
	 */
	public static String getModelCode() {
		return String.valueOf(String.valueOf(System.nanoTime()));
	}

	/**
	 * 獲取現在時間
	 * 
	 * @return返回短時間格式 yyyy-MM-dd HH:mm:ss
	 */
	public static String getNowDateSS() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateString = formatter.format(currentTime);
		return dateString;
	}

	/**
	 * 獲取現在時間
	 * 
	 * @return返回短時間格式 yyyy-MM-dd
	 */
	public static String getNowDate() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		String dateString = formatter.format(currentTime);
		return dateString;
	}

	/**
	 * 取參數月的前一個月 month: yyyy-MM或yyyyMM
	 */
	public static String getPrevMonth(String _month) {
		String preMonth = "";
		if (_month.length() == 6) {
			_month = _month.substring(0, 4) + "-" + _month.substring(4);
		}
		if (_month.length() >= 7) {
			if (_month.substring(5, 7).equals("01")) { // 1月
				preMonth = (Integer.parseInt(_month.substring(0, 4)) - 1)
						+ "-12";
			} else {
				int im = Integer.parseInt(_month.substring(5, 7)) - 1;
				if (im < 10) {
					preMonth = _month.substring(0, 4) + "-0" + im;
				} else {
					preMonth = _month.substring(0, 4) + "-" + im;
				}
			}
		}

		return preMonth;
	}

	/**
	 * 得到一個時間延後或前移幾天的時間,nowdate爲時間,delay爲前移或後延的天數
	 */
	public static String getNextDay(String nowdate, Integer delay) {
		try {
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			String mdate = "";
			Date d = strToDate(nowdate);
			long myTime = (d.getTime() / 1000) + delay * 24 * 60 * 60;
			d.setTime(myTime * 1000);
			mdate = format.format(d);
			return mdate;
		} catch (Exception e) {
			return "";
		}
	}

	/**
	 * 將短時間格式字符串轉換爲時間 yyyy-MM-dd
	 * 
	 * @param strDate
	 * @return
	 */
	public static Date strToDate(String strDate) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		ParsePosition pos = new ParsePosition(0);
		Date strtodate = formatter.parse(strDate, pos);
		return strtodate;
	}

	/**
	 * 得到二個日期間的間隔天數
	 */
	public static String getTwoDay(String sj1, String sj2) {
		SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		long day = 0;
		try {
			java.util.Date date = myFormatter.parse(sj1);
			java.util.Date mydate = myFormatter.parse(sj2);
			day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
		} catch (Exception e) {
			return "";
		}
		return day + "";
	}
}


發佈了29 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章