日期加减
package cn.com.css.misps.graph.util;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
?* @brief DateUtil.java 日期工具類
?* @attention
?* @author 涂作權
?* @date 2013-10-13
?* @note begin modify by null
?*/
public class DateUtil {
?/**
? * \brief 生成類似:201310181533 的時間值
? *
? * @return
? * @attention
? * @author 涂作權
? * @date 2013-10-18
? * @note begin modify by null
? */
?public static String getTimeNow() {
??// 使用默認時區和語言環境獲得一個日歷
??Calendar calendar = Calendar.getInstance();
??// 今年
??String year = calendar.get(Calendar.YEAR) + "";
??// 當月
??String month = ((calendar.get(Calendar.MONTH) + 1) < 10) ? "0"
????+ (calendar.get(Calendar.MONTH) + 1) : ""
????+ (calendar.get(Calendar.MONTH) + 1);
??// 當天
??String day = (calendar.get(Calendar.DAY_OF_MONTH) < 10) ? "0"
????+ calendar.get(Calendar.DAY_OF_MONTH) : ""
????+ calendar.get(Calendar.DAY_OF_MONTH);
??// 時,24小時制幾點
??String hour = (calendar.get(Calendar.HOUR_OF_DAY) < 10) ? "0"
????+ calendar.get(Calendar.HOUR_OF_DAY) : ""
????+ calendar.get(Calendar.HOUR_OF_DAY);
??// 分
??String minute = (calendar.get(Calendar.MINUTE) < 10) ? "0"
????+ calendar.get(Calendar.MINUTE) : ""
????+ calendar.get(Calendar.MINUTE);
??// 秒,暫時不用
??// int seconds = calendar.get(Calendar.SECOND);
??return year + month + day + hour + minute;
?}
?/**
? * \brief 獲取到n天后的日期
? *
? * @param string
? * @param string2
? * @attention
? * @author 涂作權
? * @date 2013-11-16
? * @note begin modify by null
? */
?public static String handleAdd(String str, Integer num) {
??// 獲得一個默認時區和語言環境獲得一個日歷
??Calendar calendar = Calendar.getInstance();
??String newStr = null;
??if (str.toLowerCase().startsWith("y")) {
???newStr = (calendar.get(Calendar.YEAR) + num) + "";
???// 判斷字符里面有幾個y,如果只有一個,則取得最后兩位,如果有4位,則返回4位
???return newStr.substring(newStr.length() - str.length());
??} else if (str.startsWith("M")) {
???// 重新設置月份
???calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + num);
???// 否則直接返回
???return ((calendar.get(Calendar.MONTH) + 1) < 10) ? "0"
?????+ (calendar.get(Calendar.MONTH) + 1) : (calendar
?????.get(Calendar.MONTH) + 1)
?????+ "";
??} else if (str.startsWith("d")) {
???//int monthNow1 = calendar.get(Calendar.MONTH) + 1;// 獲取月份
???calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH)+ num);
???//int monthNow2 = calendar.get(Calendar.MONTH) + 1;// 獲取月份
???String mouth = ((calendar.get(Calendar.MONTH) + 1) < 10) ? "0"
?????+ (calendar.get(Calendar.MONTH) + 1) + "月" : (calendar
?????.get(Calendar.MONTH) + 1)
?????+ "月";
???return (calendar.get(Calendar.DAY_OF_MONTH) < 10) ? mouth + "0"
?????+ calendar.get(Calendar.DAY_OF_MONTH) : mouth
?????+ calendar.get(Calendar.DAY_OF_MONTH);
??} else if (str.startsWith("h")) {
???calendar.set(Calendar.HOUR_OF_DAY, calendar
?????.get(Calendar.HOUR_OF_DAY)
?????+ num);
???return (calendar.get(Calendar.HOUR_OF_DAY) < 10) ? "0"
?????+ calendar.get(Calendar.HOUR_OF_DAY) : ""
?????+ calendar.get(Calendar.HOUR_OF_DAY);
??} else if (str.startsWith("m")) {
???calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + num);
???return (calendar.get(Calendar.MINUTE) < 10) ? "0"
?????+ calendar.get(Calendar.MINUTE) : calendar
?????.get(Calendar.MINUTE)
?????+ "";
??} else if (str.startsWith("s")) {
???calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) + num);
???return (calendar.get(Calendar.SECOND) < 10) ? "0"
?????+ calendar.get(Calendar.SECOND) : calendar
?????.get(Calendar.SECOND)
?????+ "";
??} else {
???calendar.set(Calendar.MILLISECOND, calendar
?????.get(Calendar.MILLISECOND)
?????+ num);
???return calendar.get(Calendar.MILLISECOND) + "";
??}
?}
?/**
? * \brief 獲取到n天后的日期
? *
? * @param string
? * @param string2
? * @attention
? * @author 涂作權
? * @date 2013-11-16
? * @note begin modify by null
? */
?public static String handleMinus(String str, Integer num) {
??// 獲得一個默認時區和語言環境獲得一個日歷
??Calendar calendar = Calendar.getInstance();
??String newStr = null;
??if (str.toLowerCase().startsWith("y")) {
???newStr = (calendar.get(Calendar.YEAR) - num) + "";
???// 判斷字符里面有幾個y,如果只有一個,則取得最后兩位,如果有4位,則返回4位
???return newStr.substring(newStr.length() - str.length());
??} else if (str.startsWith("M")) {
???// 重新設置月份
???calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - num);
???// 否則直接返回
???return ((calendar.get(Calendar.MONTH) + 1) < 10) ? "0"
?????+ (calendar.get(Calendar.MONTH) + 1) : (calendar
?????.get(Calendar.MONTH) + 1)
?????+ "";
??} else if (str.startsWith("d")) {
???calendar.set(Calendar.DAY_OF_MONTH, calendar
?????.get(Calendar.DAY_OF_MONTH)
?????- num);
???return (calendar.get(Calendar.DAY_OF_MONTH) < 10) ? "0"
?????+ calendar.get(Calendar.DAY_OF_MONTH) : calendar
?????.get(Calendar.DAY_OF_MONTH)
?????+ "";
??} else if (str.startsWith("h")) {
???calendar.set(Calendar.HOUR_OF_DAY, calendar
?????.get(Calendar.HOUR_OF_DAY)
?????- num);
???return (calendar.get(Calendar.HOUR_OF_DAY) < 10) ? "0"
?????+ calendar.get(Calendar.HOUR_OF_DAY) : ""
?????+ calendar.get(Calendar.HOUR_OF_DAY);
??} else if (str.startsWith("m")) {
???calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) - num);
???return (calendar.get(Calendar.MINUTE) < 10) ? "0"
?????+ calendar.get(Calendar.MINUTE) : calendar
?????.get(Calendar.MINUTE)
?????+ "";
??} else if (str.startsWith("s")) {
???calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) - num);
???return (calendar.get(Calendar.SECOND) < 10) ? "0"
?????+ calendar.get(Calendar.SECOND) : calendar
?????.get(Calendar.SECOND)
?????+ "";
??} else {
???calendar.set(Calendar.MILLISECOND, calendar
?????.get(Calendar.MILLISECOND)
?????- num);
???return calendar.get(Calendar.MILLISECOND) + "";
??}
?}
?/**
? * \brief 將當前日志按照指定的格式輸出字符串
? *
? * @param aMask
? * @return
? * @attention 這里只是對當前日志進行轉換
? * @author toto
? * @date 2013-11-15
? * @note begin modify by null
? */
?public static String date2String(String aMask) {
??StringBuffer sb = new StringBuffer(aMask);
??if (aMask.contains("[") && aMask.contains("]")) {
???// 再將[]里面的字符串取出來,讓后把它替換成想要的字符串
???Pattern pattern = Pattern.compile("(\\[\\w*\\+{0,}\\-{0,}\\d{0,}\\])");
???// 獲得Matcher
???Matcher matcher = pattern.matcher(sb.toString());
???while (matcher.find()) {
????String subMask = matcher.group(0);
????System.out.println("subMask = " + subMask);
????// 再判斷這個字符串中是否有"+"號。如果有再進行處理
????if (subMask.contains("+")) {
?????String tempSubMask = subMask.replace("[", "").replace("]",
???????"");
?????String[] temp = tempSubMask.split("\\+");
?????String replacedString = handleAdd(temp[0], Integer
???????.parseInt(temp[1]));
?????sb = new StringBuffer(sb.toString().replace(subMask,
???????replacedString));
?????continue;
????}
????if (subMask.contains("-")) {
?????String tempSubMask = subMask.replace("[", "").replace("]",
???????"");
?????String[] temp = tempSubMask.split("\\-");
?????String replacedString = handleMinus(temp[0], Integer
???????.parseInt(temp[1]));
?????sb = new StringBuffer(sb.toString().replace(subMask,
???????replacedString));
?????continue;
????}
????// 判斷,如果有"["或"]"這種的字符還要另行處理
????SimpleDateFormat df = new SimpleDateFormat(subMask);
????String replacedString = df.format(new Date());
????// 將字串中的類似[yyyy]這樣的串變成2013年這樣的串
????sb = new StringBuffer(sb.toString().replace(subMask,
??????replacedString));
???}
???return sb.toString().replace("[", "").replace("]", "");
??} else {
???return aMask;
??}
?}
?/**
? * \brief 判斷字符串中是否有特定字母
? *
? * @param args
? * @attention
? * @author toto
? * @date 2013-11-15
? * @note begin modify by 修改人 修改時間 修改內容摘要說明
? */
?//public static void main(String[] args) {
??// System.out.println("YYYY".toLowerCase());
??// System.out.println(date2String("SEVP_NMC_WEAP_SOB_ER24_ACHN_LNO_P9_[yy][MM][dd][HH][mm][FFF]xx.MIC"));
??// System.out.println(date2String("[yyyy]-[MM]-[dd] [HH]:[mm]:[ss] [E]"));
??// System.out.println(date2String("[yyyy].[MM].[dd] [G] 'at' [HH]:[mm]:[ss] [z]"));
??// System.out.println(date2String("[y][mm][dd][hh]_[mm][dd][hh]_[mm][dd].000"));
??//System.out.println(date2String("[y+1][MM][dd][hh]_[mm][dd][hh]_[mm][dd].000"));
??// // boolean b =
??// Pattern.compile("(?i)[a-z]").matcher("ada123456").find();
??// // System.out.println("是否包含指定字符? + " + b);
??// //
??// // Pattern pattern = pattern.compile("yy");
??//??
??// SimpleDateFormat df = null;
??// Date chgDate = null;
??// try {
??//???
??// } catch (Exception e) {
??// // TODO: handle exception
??// }
??// System.out.println(date2String("MM月dd日08時-dd日08時"));
??// System.out.println(date2String("[YY][MM][DD][HH]00[MiMi]"));
??// System.out.println(date2String("[y][mm][dd][hh]_[mm][dd][hh]_[mm][dd].000"));
??// System.out.println(date2String("-----------------------------------------"));
?
??// String str =
??// "SEVP_NMC_WEAP_SOB_ER24_ACHN_LNO_P9_[YY+1][MM][DD][HH][mm][FFF]xx.MIC";
??// Pattern pattern = Pattern.compile("(\\[\\w*\\+{0,}\\d{0,}\\])");
??// //Pattern pattern = Pattern.compile("(\\[\\w*\\])");
??//
??// Matcher matcher = pattern.matcher(str);
??// while (matcher.find()) {
??// System.out.println("Group 0:" + matcher.group(0));// 得到第0組——整個匹配
??// System.out.println("Group 1:" + matcher.group(1));//
??// 得到第一組匹配——與(or)匹配的
??// System.out.println("Group 2:" + matcher.group(2));//
??// 得到第二組匹配——與(ld!)匹配的,組也就是子表達式
??// System.out.println("Start 0:" + matcher.start(0) + " End 0:"
??// + matcher.end(0));// 總匹配的索引
??// System.out.println("Start 1:" + matcher.start(1) + " End 1:"
??// + matcher.end(1));// 第一組匹配的索引
??// System.out.println("Start 2:" + matcher.start(2) + " End 2:"
??// + matcher.end(2));// 第二組匹配的索引
??// System.out.println(str.substring(matcher.start(0),
??// matcher.end(1)));// 從總匹配開始索引到第1組匹配的結束索引之間子串——Wor
??// }
??
??//獲取當前日歷類
??//Calendar calendar = Calendar.getInstance();
??//calendar.set(Calendar.YEAR, Calendar.YEAR+1);
??//System.out.println(calendar.get(Calendar.YEAR)+1);
??//calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH)+3);
??//System.out.println(calendar.get(Calendar.MONTH));
??
??//calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 3);
??//calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + 3);
??//System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
?//}
}
總結
- 上一篇: 中国铁建是国企吗
- 下一篇: springMVC参数的传递方式(1.通