亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

日期工具類-新

張軍 4832 0


測試類

/**
 * @Description  TestDateUtil.java
 * @author 張軍
 * @date 2021年10月19日 下午11:18:23
 * @version V1.0
 */
package test.share;

import java.util.Date;

import org.junit.Test;

import test.all.TestUtil;
import zj.date.util.DateUtil;
import zj.java.util.JavaUtil;

/**
 * @author 張軍
 * @date 2021年10月19日 下午11:18:23
 * @version V1.0
 */
public class TestDateUtil {
	@Test
	public void 基本工具類() {
		System.out.println("日期轉字符串");
		System.out.println(DateUtil.dateParse(new Date(), "yyyy年MM月dd日HH時mm分ss秒SSS毫秒p(0-6=>周日-周六)w x q季度"));
		System.out.println("字符串轉日期");
		System.out.println(DateUtil.parseDate("2019-07-30"));
		System.out.println(DateUtil.parseDate("2019-07-30 10:11:12"));
		System.out.println(DateUtil.parseDate("20190730"));
		System.out.println(DateUtil.parseDate("20190730101112"));
		System.out.println(DateUtil.parseDate("2019/07/30 10:11:12"));
		System.out.println(DateUtil.parseDate("2019-07-30 10:11"));
		System.out.println(DateUtil.parseDate("2019/07/30 10:11"));
		System.out.println(DateUtil.parseDate("2019/07/30 10"));
		System.out.println(DateUtil.parseDate("2019-07-30 10"));
		System.out.println("日期相差天數");
		System.out.println("2019-02-25到2019-03-10共" + DateUtil.diffDay(DateUtil.parseDate("2019-02-25"), DateUtil.parseDate("2019-03-10")) + "天");
		System.out.println("2019-02-25加10天是" + DateUtil.dateParse(DateUtil.addDay(DateUtil.parseDate("2019-02-25"), 10), "yyyy-MM-dd"));
		System.out.println("對日期或時間相加減就不多做測試了");
		System.out.println(DateUtil.dateParse(new Date(), "yyy-MM-ddw"));
		System.out.println(DateUtil.getDescWeekday(DateUtil.dateParse(new Date(), "w")));
		System.out.println(DateUtil.dateParse(DateUtil.parseDate("20200820080301"), "HH24點m分ss秒"));
	}

	@Test
	public void 時間相差() {
		String sd = "1234年56月78日 星期三";
		sd = "01月03日 星期日 03:20";
		String t = "91:23";
		// String s = sd + t;
		String V_sdateNum = JavaUtil.conversionStringToNumber(sd) + "00";
		if (V_sdateNum.length() == 10) {
			V_sdateNum = DateUtil.dateParse(new Date(), "yyyy") + V_sdateNum;
		}
		System.out.println(JavaUtil.split(sd.replace("年", "").replace("月", "").replace("日", ""), " ")[0]);
		System.out.println(t.replace(":", "") + "00");
		System.out.println(V_sdateNum);
		System.out.println(DateUtil.dateParse(DateUtil.parseDate(V_sdateNum)));
		Date d = new Date();
		d.setTime(1625713200000l);
		System.out.println(DateUtil.dateParse(d));
		System.out.println(DateUtil.dateParse(DateUtil.addMonth(DateUtil.parseDate("2020-01-31"), 1)));
	}

	@Test
	public void 日期范圍() {
		TestUtil.printStart("查詢日期范圍");
		Date startDate = DateUtil.parseDate("2021");
		String sstartDate = DateUtil.dateParse(startDate, "yyyy-MM-dd");
		String sendDate = DateUtil.dateParse(DateUtil.addYear(startDate, 3), "yyyy-MM-dd");
		long diffDays = DateUtil.diffDay(DateUtil.parseDate(sstartDate), DateUtil.parseDate(sendDate));
		System.out.println(sstartDate + "到" + sendDate + "共" + diffDays + "天,以下是循環每一天");
		for (int a = 0; a <= diffDays; a++) {
			Date d = DateUtil.addDay(DateUtil.parseDate(sstartDate), a);
			// String tdate = DateUtil.dateParse(d, "yyyy年MM月dd日 ") + DateUtil.getDescWeekday(DateUtil.dateParse(d, "w"));
			String tdate = DateUtil.dateParse(d, "yyyyMMdd");
			// String tdate = DateUtil.dateParse(d, "MM月dd日 ") + DateUtil.getDescWeekday(DateUtil.dateParse(d, "w"));
			// String tdate = DateUtil.dateParse(d, "yyyy");
			System.out.println("'" + tdate + "',");
		}
		TestUtil.printEnd("查詢日期范圍");
	}
}

測試結果


日期轉字符串
2021年10月19日23時20分22秒894毫秒下午(0-6=>周日-周六)2 星期二 4季度
字符串轉日期
Tue Jul 30 00:00:00 CST 2019
Tue Jul 30 10:11:12 CST 2019
Tue Jul 30 00:00:00 CST 2019
Tue Jul 30 10:11:12 CST 2019
Tue Jul 30 10:11:12 CST 2019
Tue Jul 30 10:11:00 CST 2019
Tue Jul 30 10:11:00 CST 2019
Tue Jul 30 10:00:00 CST 2019
Tue Jul 30 10:00:00 CST 2019
日期相差天數
2019-02-25到2019-03-10共13天
2019-02-25加10天是2019-03-07
對日期或時間相加減就不多做測試了
21y-10-192
星期二
08點3分01秒
查詢日期范圍------>測試開始
2021-01-01到2024-01-01共1095天,以下是循環每一天
'20210101',
'20210102',
'20210103',
'20210104',
'20210105',
'20210106',
'20210107',
'20210108',
'20210109',
'20210110',
'20210111',
'20210112',
'20210113',
'20210114',
'20210115',
'20210116',
'20210117',
'20210118',
'20210119',
'20210120',
'20210121',
'20210122',
'20210123',
'20210124',
'20210125',
'20210126',
'20210127',
'20210128',
'20210129',
'20210130',
'20210131',
'20210201',
'20210202',
'20210203',
'20210204',
'20210205',
'20210206',
'20210207',
'20210208',
'20210209',
'20210210',
'20210211',
'20210212',
'20210213',
'20210214',
'20210215',
'20210216',
'20210217',
'20210218',
'20210219',
'20210220',
'20210221',
'20210222',
'20210223',
'20210224',
'20210225',
'20210226',
'20210227',
'20210228',
'20210301',
'20210302',
'20210303',
'20210304',
'20210305',
'20210306',
'20210307',
'20210308',
'20210309',
'20210310',
'20210311',
'20210312',
'20210313',
'20210314',
'20210315',
'20210316',
'20210317',
'20210318',
'20210319',
'20210320',
'20210321',
'20210322',
'20210323',
'20210324',
'20210325',
'20210326',
'20210327',
'20210328',
'20210329',
'20210330',
'20210331',
'20210401',
'20210402',
'20210403',
'20210404',
'20210405',
'20210406',
'20210407',
'20210408',
'20210409',
'20210410',
'20210411',
'20210412',
'20210413',
'20210414',
'20210415',
'20210416',
'20210417',
'20210418',
'20210419',
'20210420',
'20210421',
'20210422',
'20210423',
'20210424',
'20210425',
'20210426',
'20210427',
'20210428',
'20210429',
'20210430',
'20210501',
'20210502',
'20210503',
'20210504',
'20210505',
'20210506',
'20210507',
'20210508',
'20210509',
'20210510',
'20210511',
'20210512',
'20210513',
'20210514',
'20210515',
'20210516',
'20210517',
'20210518',
'20210519',
'20210520',
'20210521',
'20210522',
'20210523',
'20210524',
'20210525',
'20210526',
'20210527',
'20210528',
'20210529',
'20210530',
'20210531',
'20210601',
'20210602',
'20210603',
'20210604',
'20210605',
'20210606',
'20210607',
'20210608',
'20210609',
'20210610',
'20210611',
'20210612',
'20210613',
'20210614',
'20210615',
'20210616',
'20210617',
'20210618',
'20210619',
'20210620',
'20210621',
'20210622',
'20210623',
'20210624',
'20210625',
'20210626',
'20210627',
'20210628',
'20210629',
'20210630',
'20210701',
'20210702',
'20210703',
'20210704',
'20210705',
'20210706',
'20210707',
'20210708',
'20210709',
'20210710',
'20210711',
'20210712',
'20210713',
'20210714',
'20210715',
'20210716',
'20210717',
'20210718',
'20210719',
'20210720',
'20210721',
'20210722',
'20210723',
'20210724',
'20210725',
'20210726',
'20210727',
'20210728',
'20210729',
'20210730',
'20210731',
'20210801',
'20210802',
'20210803',
'20210804',
'20210805',
'20210806',
'20210807',
'20210808',
'20210809',
'20210810',
'20210811',
'20210812',
'20210813',
'20210814',
'20210815',
'20210816',
'20210817',
'20210818',
'20210819',
'20210820',
'20210821',
'20210822',
'20210823',
'20210824',
'20210825',
'20210826',
'20210827',
'20210828',
'20210829',
'20210830',
'20210831',
'20210901',
'20210902',
'20210903',
'20210904',
'20210905',
'20210906',
'20210907',
'20210908',
'20210909',
'20210910',
'20210911',
'20210912',
'20210913',
'20210914',
'20210915',
'20210916',
'20210917',
'20210918',
'20210919',
'20210920',
'20210921',
'20210922',
'20210923',
'20210924',
'20210925',
'20210926',
'20210927',
'20210928',
'20210929',
'20210930',
'20211001',
'20211002',
'20211003',
'20211004',
'20211005',
'20211006',
'20211007',
'20211008',
'20211009',
'20211010',
'20211011',
'20211012',
'20211013',
'20211014',
'20211015',
'20211016',
'20211017',
'20211018',
'20211019',
'20211020',
'20211021',
'20211022',
'20211023',
'20211024',
'20211025',
'20211026',
'20211027',
'20211028',
'20211029',
'20211030',
'20211031',
'20211101',
'20211102',
'20211103',
'20211104',
'20211105',
'20211106',
'20211107',
'20211108',
'20211109',
'20211110',
'20211111',
'20211112',
'20211113',
'20211114',
'20211115',
'20211116',
'20211117',
'20211118',
'20211119',
'20211120',
'20211121',
'20211122',
'20211123',
'20211124',
'20211125',
'20211126',
'20211127',
'20211128',
'20211129',
'20211130',
'20211201',
'20211202',
'20211203',
'20211204',
'20211205',
'20211206',
'20211207',
'20211208',
'20211209',
'20211210',
'20211211',
'20211212',
'20211213',
'20211214',
'20211215',
'20211216',
'20211217',
'20211218',
'20211219',
'20211220',
'20211221',
'20211222',
'20211223',
'20211224',
'20211225',
'20211226',
'20211227',
'20211228',
'20211229',
'20211230',
'20211231',
'20220101',
'20220102',
'20220103',
'20220104',
'20220105',
'20220106',
'20220107',
'20220108',
'20220109',
'20220110',
'20220111',
'20220112',
'20220113',
'20220114',
'20220115',
'20220116',
'20220117',
'20220118',
'20220119',
'20220120',
'20220121',
'20220122',
'20220123',
'20220124',
'20220125',
'20220126',
'20220127',
'20220128',
'20220129',
'20220130',
'20220131',
'20220201',
'20220202',
'20220203',
'20220204',
'20220205',
'20220206',
'20220207',
'20220208',
'20220209',
'20220210',
'20220211',
'20220212',
'20220213',
'20220214',
'20220215',
'20220216',
'20220217',
'20220218',
'20220219',
'20220220',
'20220221',
'20220222',
'20220223',
'20220224',
'20220225',
'20220226',
'20220227',
'20220228',
'20220301',
'20220302',
'20220303',
'20220304',
'20220305',
'20220306',
'20220307',
'20220308',
'20220309',
'20220310',
'20220311',
'20220312',
'20220313',
'20220314',
'20220315',
'20220316',
'20220317',
'20220318',
'20220319',
'20220320',
'20220321',
'20220322',
'20220323',
'20220324',
'20220325',
'20220326',
'20220327',
'20220328',
'20220329',
'20220330',
'20220331',
'20220401',
'20220402',
'20220403',
'20220404',
'20220405',
'20220406',
'20220407',
'20220408',
'20220409',
'20220410',
'20220411',
'20220412',
'20220413',
'20220414',
'20220415',
'20220416',
'20220417',
'20220418',
'20220419',
'20220420',
'20220421',
'20220422',
'20220423',
'20220424',
'20220425',
'20220426',
'20220427',
'20220428',
'20220429',
'20220430',
'20220501',
'20220502',
'20220503',
'20220504',
'20220505',
'20220506',
'20220507',
'20220508',
'20220509',
'20220510',
'20220511',
'20220512',
'20220513',
'20220514',
'20220515',
'20220516',
'20220517',
'20220518',
'20220519',
'20220520',
'20220521',
'20220522',
'20220523',
'20220524',
'20220525',
'20220526',
'20220527',
'20220528',
'20220529',
'20220530',
'20220531',
'20220601',
'20220602',
'20220603',
'20220604',
'20220605',
'20220606',
'20220607',
'20220608',
'20220609',
'20220610',
'20220611',
'20220612',
'20220613',
'20220614',
'20220615',
'20220616',
'20220617',
'20220618',
'20220619',
'20220620',
'20220621',
'20220622',
'20220623',
'20220624',
'20220625',
'20220626',
'20220627',
'20220628',
'20220629',
'20220630',
'20220701',
'20220702',
'20220703',
'20220704',
'20220705',
'20220706',
'20220707',
'20220708',
'20220709',
'20220710',
'20220711',
'20220712',
'20220713',
'20220714',
'20220715',
'20220716',
'20220717',
'20220718',
'20220719',
'20220720',
'20220721',
'20220722',
'20220723',
'20220724',
'20220725',
'20220726',
'20220727',
'20220728',
'20220729',
'20220730',
'20220731',
'20220801',
'20220802',
'20220803',
'20220804',
'20220805',
'20220806',
'20220807',
'20220808',
'20220809',
'20220810',
'20220811',
'20220812',
'20220813',
'20220814',
'20220815',
'20220816',
'20220817',
'20220818',
'20220819',
'20220820',
'20220821',
'20220822',
'20220823',
'20220824',
'20220825',
'20220826',
'20220827',
'20220828',
'20220829',
'20220830',
'20220831',
'20220901',
'20220902',
'20220903',
'20220904',
'20220905',
'20220906',
'20220907',
'20220908',
'20220909',
'20220910',
'20220911',
'20220912',
'20220913',
'20220914',
'20220915',
'20220916',
'20220917',
'20220918',
'20220919',
'20220920',
'20220921',
'20220922',
'20220923',
'20220924',
'20220925',
'20220926',
'20220927',
'20220928',
'20220929',
'20220930',
'20221001',
'20221002',
'20221003',
'20221004',
'20221005',
'20221006',
'20221007',
'20221008',
'20221009',
'20221010',
'20221011',
'20221012',
'20221013',
'20221014',
'20221015',
'20221016',
'20221017',
'20221018',
'20221019',
'20221020',
'20221021',
'20221022',
'20221023',
'20221024',
'20221025',
'20221026',
'20221027',
'20221028',
'20221029',
'20221030',
'20221031',
'20221101',
'20221102',
'20221103',
'20221104',
'20221105',
'20221106',
'20221107',
'20221108',
'20221109',
'20221110',
'20221111',
'20221112',
'20221113',
'20221114',
'20221115',
'20221116',
'20221117',
'20221118',
'20221119',
'20221120',
'20221121',
'20221122',
'20221123',
'20221124',
'20221125',
'20221126',
'20221127',
'20221128',
'20221129',
'20221130',
'20221201',
'20221202',
'20221203',
'20221204',
'20221205',
'20221206',
'20221207',
'20221208',
'20221209',
'20221210',
'20221211',
'20221212',
'20221213',
'20221214',
'20221215',
'20221216',
'20221217',
'20221218',
'20221219',
'20221220',
'20221221',
'20221222',
'20221223',
'20221224',
'20221225',
'20221226',
'20221227',
'20221228',
'20221229',
'20221230',
'20221231',
'20230101',
'20230102',
'20230103',
'20230104',
'20230105',
'20230106',
'20230107',
'20230108',
'20230109',
'20230110',
'20230111',
'20230112',
'20230113',
'20230114',
'20230115',
'20230116',
'20230117',
'20230118',
'20230119',
'20230120',
'20230121',
'20230122',
'20230123',
'20230124',
'20230125',
'20230126',
'20230127',
'20230128',
'20230129',
'20230130',
'20230131',
'20230201',
'20230202',
'20230203',
'20230204',
'20230205',
'20230206',
'20230207',
'20230208',
'20230209',
'20230210',
'20230211',
'20230212',
'20230213',
'20230214',
'20230215',
'20230216',
'20230217',
'20230218',
'20230219',
'20230220',
'20230221',
'20230222',
'20230223',
'20230224',
'20230225',
'20230226',
'20230227',
'20230228',
'20230301',
'20230302',
'20230303',
'20230304',
'20230305',
'20230306',
'20230307',
'20230308',
'20230309',
'20230310',
'20230311',
'20230312',
'20230313',
'20230314',
'20230315',
'20230316',
'20230317',
'20230318',
'20230319',
'20230320',
'20230321',
'20230322',
'20230323',
'20230324',
'20230325',
'20230326',
'20230327',
'20230328',
'20230329',
'20230330',
'20230331',
'20230401',
'20230402',
'20230403',
'20230404',
'20230405',
'20230406',
'20230407',
'20230408',
'20230409',
'20230410',
'20230411',
'20230412',
'20230413',
'20230414',
'20230415',
'20230416',
'20230417',
'20230418',
'20230419',
'20230420',
'20230421',
'20230422',
'20230423',
'20230424',
'20230425',
'20230426',
'20230427',
'20230428',
'20230429',
'20230430',
'20230501',
'20230502',
'20230503',
'20230504',
'20230505',
'20230506',
'20230507',
'20230508',
'20230509',
'20230510',
'20230511',
'20230512',
'20230513',
'20230514',
'20230515',
'20230516',
'20230517',
'20230518',
'20230519',
'20230520',
'20230521',
'20230522',
'20230523',
'20230524',
'20230525',
'20230526',
'20230527',
'20230528',
'20230529',
'20230530',
'20230531',
'20230601',
'20230602',
'20230603',
'20230604',
'20230605',
'20230606',
'20230607',
'20230608',
'20230609',
'20230610',
'20230611',
'20230612',
'20230613',
'20230614',
'20230615',
'20230616',
'20230617',
'20230618',
'20230619',
'20230620',
'20230621',
'20230622',
'20230623',
'20230624',
'20230625',
'20230626',
'20230627',
'20230628',
'20230629',
'20230630',
'20230701',
'20230702',
'20230703',
'20230704',
'20230705',
'20230706',
'20230707',
'20230708',
'20230709',
'20230710',
'20230711',
'20230712',
'20230713',
'20230714',
'20230715',
'20230716',
'20230717',
'20230718',
'20230719',
'20230720',
'20230721',
'20230722',
'20230723',
'20230724',
'20230725',
'20230726',
'20230727',
'20230728',
'20230729',
'20230730',
'20230731',
'20230801',
'20230802',
'20230803',
'20230804',
'20230805',
'20230806',
'20230807',
'20230808',
'20230809',
'20230810',
'20230811',
'20230812',
'20230813',
'20230814',
'20230815',
'20230816',
'20230817',
'20230818',
'20230819',
'20230820',
'20230821',
'20230822',
'20230823',
'20230824',
'20230825',
'20230826',
'20230827',
'20230828',
'20230829',
'20230830',
'20230831',
'20230901',
'20230902',
'20230903',
'20230904',
'20230905',
'20230906',
'20230907',
'20230908',
'20230909',
'20230910',
'20230911',
'20230912',
'20230913',
'20230914',
'20230915',
'20230916',
'20230917',
'20230918',
'20230919',
'20230920',
'20230921',
'20230922',
'20230923',
'20230924',
'20230925',
'20230926',
'20230927',
'20230928',
'20230929',
'20230930',
'20231001',
'20231002',
'20231003',
'20231004',
'20231005',
'20231006',
'20231007',
'20231008',
'20231009',
'20231010',
'20231011',
'20231012',
'20231013',
'20231014',
'20231015',
'20231016',
'20231017',
'20231018',
'20231019',
'20231020',
'20231021',
'20231022',
'20231023',
'20231024',
'20231025',
'20231026',
'20231027',
'20231028',
'20231029',
'20231030',
'20231031',
'20231101',
'20231102',
'20231103',
'20231104',
'20231105',
'20231106',
'20231107',
'20231108',
'20231109',
'20231110',
'20231111',
'20231112',
'20231113',
'20231114',
'20231115',
'20231116',
'20231117',
'20231118',
'20231119',
'20231120',
'20231121',
'20231122',
'20231123',
'20231124',
'20231125',
'20231126',
'20231127',
'20231128',
'20231129',
'20231130',
'20231201',
'20231202',
'20231203',
'20231204',
'20231205',
'20231206',
'20231207',
'20231208',
'20231209',
'20231210',
'20231211',
'20231212',
'20231213',
'20231214',
'20231215',
'20231216',
'20231217',
'20231218',
'20231219',
'20231220',
'20231221',
'20231222',
'20231223',
'20231224',
'20231225',
'20231226',
'20231227',
'20231228',
'20231229',
'20231230',
'20231231',
'20240101',
查詢日期范圍------>測試結束
0103
912300
20210103032000
2021年01月03日03時20分00秒000毫秒上午(1-7=>周一-周日)7 星期日 1季度
2021年07月08日11時00分00秒000毫秒上午(1-7=>周一-周日)4 星期四 3季度
2020年02月29日00時00分00秒000毫秒上午(1-7=>周一-周日)6 星期六 1季度


工具類

package zj.date.util;

import java.io.File;
import java.io.Serializable;
import java.net.InetAddress;
import java.net.URL;
import java.net.URLConnection;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.log4j.Logger;

import zj.cache.util.EhCacheUtil;
import zj.check.util.CheckUtil;
import zj.common.exception.ServiceException;
import zj.date.bean.TradeDate;
import zj.io.util.FileUtil;
import zj.java.util.JavaUtil;
import zj.type.TypeUtil;

/**
 * 
 * 日期工具類
 * <p>
 * 一般,在項目中,我們會會經常使用到日期的各種方式的處理,在各個業務邏輯操作中,都需要相關的日期操作, 因此,實現項目中的日期工具類的提出,還是十分重要的,下面,就項目中常用到的日期的相關操作方式, 做了一個小的工具類,幾乎包含所有的日期操作了,方便項目使用,也方便以后的復用和查詢.下面見代碼:
 * </p>
 * 
 * @version 1.00 (2014.09.15)
 * @author SHNKCS 張軍 {@link <a target=_blank href="http://m.eyofj.com">上海加盾信息科技有限公司</a>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://m.eyofj.com">張軍個人網站</a>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://user.qzone.qq.com/360901061/">張軍QQ空間</a>}
 * 
 */
public class DateUtil implements Serializable {
	private static final long serialVersionUID = 1L;
	private transient static final Logger log = Logger.getLogger(DateUtil.class);
	public static final String EHCACHE_HOLIDAY_DATE = "holidayDate";

	/**
	 * 獲取域名IP
	 * 
	 * @return
	 */
	public static String ipByDomain(String P_url) {
		try {
			if (P_url.startsWith("https://")) {
				P_url = P_url.substring("https://".length());
			}
			if (P_url.startsWith("http://")) {
				P_url = P_url.substring("http://".length());
			}
			InetAddress R_ia = InetAddress.getByName(P_url);
			return R_ia.getHostAddress();
		} catch (Exception e) {
			throw new RuntimeException("[錯誤] 獲取域名IP", e);
		}
	}

	/**
	 * 判斷域名是否是指定IP地址
	 * 
	 * @param P_url
	 *            域名
	 * @param P_ip
	 *            IP地址
	 * @return
	 */
	public static boolean ipCheckByDomain(String P_url, String P_ip) {
		try {
			String R_ip = ipByDomain(P_url);
			return R_ip.equals(P_ip);
		} catch (Exception e) {
			throw new RuntimeException("[錯誤] 判斷域名是否是指定IP地址", e);
		}
	}

	/**
	 * 獲取指定網站的日期時間
	 * 
	 * @param P_url
	 *            域名
	 * @return 日期
	 */
	public static Date ipDate(String P_url) {
		return ipDate(P_url, null);
	}

	/**
	 * 獲取指定網站的日期時間
	 * 
	 * @param P_url
	 *            域名
	 * @param P_ip
	 *            IP地址
	 * @return 日期
	 */
	public static Date ipDate(String P_url, String P_ip) {
		try {
			if (CheckUtil.isNotNull(P_ip) && !ipCheckByDomain(P_url, P_ip)) {
				// 如果為映射IP,則不行
				return null;
			}
			if (!P_url.startsWith("https://") && !P_url.startsWith("http://")) {
				P_url = "http://" + P_url;
			}
			// 取得資源對象
			URL url = new URL(P_url);
			// 生成連接對象
			URLConnection uc = url.openConnection();
			uc.connect();// 發出連接
			long ld = uc.getDate();// 讀取網站日期時間
			Date date = new Date(ld);// 轉換為標準時間對象
			// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);// 輸出北京時間
			// return sdf.format(date);
			return date;
		} catch (Exception e) {
			return null;
		}
	}

	// =====================================================交易日======================================
	// DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.CHINA);
	// String value = "'" + formatter.format(new Date()) + "'";
	// System.out.println(value);
	// /**
	// * 初使化節假日數據
	// *
	// * @param conn
	// * 數據庫連接
	// * @return
	// */
	// public static void cacheHoliday(Connection conn) {
	// Map<String, String> holidayMap = new HashMap<String, String>();
	// PreparedStatement psQuery = null;
	// ResultSet rs = null;
	// try {
	// String sql = "select date_format(a.c_date,'%Y%m%d') c_date,a.c_desc from dc_trade_date a where a.is_trade_date=2";
	// psQuery = conn.prepareStatement(sql);
	// rs = psQuery.executeQuery();
	// while (rs.next()) {
	// holidayMap.put(rs.getString(1), rs.getString(2));
	// }
	// EhCacheUtil.put(Constant.EHCACHE_HOLIDAY_DATE, holidayMap);
	// logger.info("緩存節假日數據成功:" + holidayMap.size());
	// } catch (Exception e) {
	// throw new ServiceException(e);
	// } finally {
	// JdbcUtil.closeDB(rs, psQuery);
	// }
	// }
	/**
	 * 取上一個交易日
	 * 
	 * @param td
	 *            參數信息
	 * @return
	 */
	public static final Date preTradeDate() {
		TradeDate td = new TradeDate();
		td.beforeCurrent = true;
		return tradeDate(td);
	}

	/**
	 * 取下一個交易日
	 * 
	 * @param td
	 *            參數信息
	 * @return
	 */
	public static final Date nextTradeDate() {
		TradeDate td = new TradeDate();
		td.beforeCurrent = false;
		return tradeDate(td);
	}

	/**
	 * 取交易日[不包含當前日期]
	 * 
	 * @param td
	 *            參數信息
	 * @return
	 */
	public static final Date tradeDate(TradeDate td) {
		Map<String, String> holidayMap = EhCacheUtil.get(EHCACHE_HOLIDAY_DATE);
		if (holidayMap == null || holidayMap.size() == 0) {
			throw new ServiceException("未初使化交易日文件,請執行DateUtil.initTradeDate(file)");
		}
		/** 當前日期 **/
		if (td.current == null) {
			td.current = new Date();
		}
		Date current = td.current;
		// ==========================================
		/** 類型[默認0:天,1:周,2:月,3:季度,4:年] **/
		int type = td.type;
		/** 當前日期前后,默認前(和類型做匹配使用) **/
		boolean beforeCurrent = td.beforeCurrent;
		// ==========================================
		/** 交易日前后,默認前 **/
		boolean beforeTradeDate = td.beforeTradeDate;
		// ==========================================
		/** 遞歸次數 **/
		int recursionCount = td.recursionCount;

		// 首先取上一個日期
		if (type == 1) {
			// 加減7天
			current = DateUtil.addDay(current, beforeCurrent ? -7 : 7);
		} else if (type == 2) {
			// 加減1個月
			current = DateUtil.addMonth(current, beforeCurrent ? -1 : 1);
		} else if (type == 3) {
			// 加減3個月
			current = DateUtil.addMonth(current, beforeCurrent ? -3 : 3);
		} else if (type == 4) {
			// 加減1年
			current = DateUtil.addYear(current, beforeCurrent ? -1 : 1);
		} else {
			// 加減1天
			current = DateUtil.addDay(current, beforeCurrent ? -1 : 1);
		}
		// 交易日前還是后+(1)T日
		int addDay = beforeTradeDate ? -1 : 1;
		// 加一天
		while (holidayMap.containsKey(DateUtil.dateParse(current, "yyyyMMdd"))) {
			// 是否是節假日
			current = DateUtil.addDay(current, addDay);
		}
		if (recursionCount <= 1) {
			return current;
		} else {
			td.current = current;
			td.recursionCount = td.recursionCount - 1;
			return tradeDate(td);
		}
	}

	/**
	 * 取交易日
	 * 
	 * @param P_date
	 *            交易日
	 * @param P_nums
	 *            T日(正表示T+P_nums或負表示T-P_nums)
	 * @return
	 */
	public static final Date tradeDate(Date P_date, int P_nums) {
		Map<String, String> holidayMap = EhCacheUtil.get(EHCACHE_HOLIDAY_DATE);
		if (holidayMap == null || holidayMap.size() == 0) {
			throw new ServiceException("未初使化交易日文件,請執行DateUtil.initTradeDate(file)");
		}
		// 臨時變量
		Date V_current = P_date;
		int addDay = 0;
		if (P_nums > 0) {
			// 往后推
			addDay = 1;
		} else if (P_nums < 0) {
			// 往前推
			addDay = -1;
		} else {
			// 不處理
			return P_date;
		}
		// 取絕對值
		P_nums = Math.abs(P_nums);
		while (P_nums > 0) {
			// 加減一天,判斷是否是交易日
			V_current = DateUtil.addDay(V_current, addDay);
			if (holidayMap.containsKey(DateUtil.dateParse(V_current, "yyyyMMdd"))) {
				// 是節假日
			} else {
				// 是交易日(表示V_current日期可以返回)
				P_nums--;
			}
		}
		return V_current;
	}

	/**
	 * 是否是交易日
	 * 
	 * @param current
	 *            日期
	 * @return
	 */
	public static final boolean isTradeDate(Date current) {
		Map<String, String> holidayMap = EhCacheUtil.get(EHCACHE_HOLIDAY_DATE);
		if (holidayMap.containsKey(DateUtil.dateParse(current, "yyyyMMdd"))) {
			return false;
		}
		return true;
	}

	/**
	 * 初使化交易日數據
	 * 
	 * @param holidayMap
	 *            交易日數據
	 */
	public static final void initTradeDate(Map<String, String> holidayMap) {
		EhCacheUtil.put(EHCACHE_HOLIDAY_DATE, holidayMap);
	}

	/**
	 * 初使化交易日數據
	 * 
	 * @param tradeDateFilePath
	 *            交易日文件
	 */
	public static final void initTradeDate(String tradeDateFilePath) {
		try {
			// 測試股票
			// System.out.println(DateUtil.class.getResource("/trade_dates.txt").getPath());
			// String file = "/versionManager/sources/java/zj-model/integration/tools/src/main/resources/trade_dates.txt";
			Set<String> holidays = new HashSet<String>();
			Map<String, String> holidayMap = new HashMap<String, String>();
			FileUtil.readLines(holidays, new File(tradeDateFilePath));
			for (String v : holidays) {
				String[] vs = JavaUtil.split(v, "\t");
				if (vs.length == 2) {
					// System.out.println(vs[0] + ":" + vs[1]);
					holidayMap.put(vs[0], vs[1]);
				}
			}
			EhCacheUtil.put(EHCACHE_HOLIDAY_DATE, holidayMap);
		} catch (Exception e) {
			log.error("初使化交易日錯誤");
		}
	}

	/**
	 * 取交易日
	 * 
	 * @param current
	 *            日期
	 * @see #tradeDate(TradeDate)
	 * @return
	 */
	@Deprecated
	public static final Date preTradeDate(Date current) {
		return preTradeDate(current, 1, true);
	}

	/**
	 * 取交易日
	 * 
	 * @param current
	 *            日期
	 * @see #tradeDate(TradeDate)
	 * @return
	 */
	@Deprecated
	public static final Date preTradeDate(Date current, int tDay) {
		return preTradeDate(current, tDay, true);
	}

	/**
	 * 取交易日
	 * 
	 * @param current
	 *            日期
	 * @see #tradeDate(TradeDate)
	 * @return
	 */
	@Deprecated
	public static final Date preTradeDate(Date current, int tDay, boolean before) {
		Map<String, String> holidayMap = EhCacheUtil.get(EHCACHE_HOLIDAY_DATE);
		if (holidayMap == null || holidayMap.size() == 0) {
			throw new ServiceException("未初使化交易日文件,請執行DateUtil.initTradeDate(file)");
		}
		// 首先取上一個日期
		int addDay = before ? -1 : 1;
		current = DateUtil.addDay(current, addDay);
		// 加一天
		while (holidayMap.containsKey(DateUtil.dateParse(current, "yyyyMMdd"))) {
			// 是否是節假日
			current = DateUtil.addDay(current, addDay);
		}
		if (tDay <= 1) {
			return current;
		} else {
			return preTradeDate(current, tDay - 1, before);
		}
	}

	/**
	 * 獲取交易日集合
	 * 
	 * @param sdate
	 *            日期
	 * @param preDays
	 *            向前取多少天
	 * @param diffDays
	 *            相差多少天
	 * @author zhangjun
	 * @return
	 */
	public static List<String> getTradeDates(String sdate, int preDays, int diffDays) {
		List<String> rdates = new ArrayList<String>();
		try {
			Date date = DateUtil.parseDate(sdate);
			Map<String, String> holidayDate = EhCacheUtil.get(EHCACHE_HOLIDAY_DATE);
			// 相差天數
			diffDays = diffDays <= 0 ? -1 : -(diffDays + 1);
			// 總交易日
			int totalDays = -diffDays * preDays;
			// 相隔日期
			List<String> dates = new ArrayList<String>();
			loop: while (true) {
				while (true) {
					// 判斷是否是節假日
					if (!holidayDate.containsKey(DateUtil.dateParse(date, "yyyyMMdd"))) {
						// 添加交易日
						dates.add(DateUtil.dateParse(date, "yyyy-MM-dd"));
						// 總天數減1
						totalDays--;
						if (totalDays <= 0) {
							// 循環結束后-1
							break loop;
						}
					}
					date = DateUtil.addDay(date, -1);
				}
			}
			// 真實的交易日
			for (int i = 0; i < dates.size(); i = i - diffDays) {
				rdates.add(dates.get(i));
			}
			// logger.info("-------待計算的所有交易日------------\n" + dates.size() + ":" + dates);
			// logger.info("-------計算相隔后的所有交易日------------\n" + rdates.size() + ":" + rdates);
		} catch (Exception e) {
			throw new ServiceException(e);
		}
		return rdates;
	}

	// =====================================================交易日======================================
	/**
	 * 日期類型
	 * 
	 * @author zhangjun
	 * 
	 */
	public static class DateType implements Serializable {
		private static final long serialVersionUID = 1L;
		public static int DATE_TYPE_ALL = 0;
		public static int DATE_TYPE_y4 = 1;
		public static int DATE_TYPE_y4_MM = 2;
		public static int DATE_TYPE_y4_MM_dd = 3;
		public static int DATE_TYPE_y4_MM_dd_HH = 4;
		public static int DATE_TYPE_y4_MM_dd_HH_mm = 5;
		public static int DATE_TYPE_y4_MM_dd_HH_mm_ss = 6;

		public static int RANGE_TYPE_y = 0;
		public static int RANGE_TYPE_M = 1;
		public static int RANGE_TYPE_d = 2;
		public static int RANGE_TYPE_H = 3;
		public static int RANGE_TYPE_m = 4;
		public static int RANGE_TYPE_s = 5;
	}

	/**
	 * 星期標識1-7=>周一-周日
	 */
	public static enum Weekday {
		MONDAY("1", "星期一"), TUESDAY("2", "星期二"), WEDNESDAY("3", "星期三"), THURSDAY("4", "星期四"), FRIDAY("5", "星期五"), SATURDAY("6", "星期六"), SUNDAY("7", "星期日");
		private final String value;

		public String getValue() {
			return value;
		}

		private final String name;

		public String getName() {
			return name;
		}

		Weekday(String value, String name) {
			this.value = value;
			this.name = name;
		}

		// 普通方法
		public static String getName(String value) {
			for (Weekday entity : Weekday.values()) {
				if (entity.getValue().equals(value)) {
					return entity.name;
				}
			}
			return "未知";
		}
	}

	/**
	 * 獲取星期幾
	 * 
	 * @param w
	 *            星期標識1-7=>周一-周日
	 * @return
	 */
	public static final String getDescWeekday(int w) {
		switch (w) {
		case 1:
			return "星期一";
		case 2:
			return "星期二";
		case 3:
			return "星期三";
		case 4:
			return "星期四";
		case 5:
			return "星期五";
		case 6:
			return "星期六";
		case 7:
			return "星期日";
		default:
			return "";
		}
	}

	/**
	 * 獲取星期幾
	 * 
	 * @param w
	 *            星期標識0-6=>周日-周六
	 * @return
	 */
	public static final String getDescWeekday(String w) {
		return getDescWeekday(TypeUtil.Primitive.intValue(w));
	}

	/**
	 * 字符串轉日期
	 * 
	 * @param dt
	 *            日期字符串
	 * @return 日期對象
	 */
	public static Date parseDate(String dt) {
		return parseDate(dt, DateType.DATE_TYPE_ALL);
	}

	/**
	 * 字符串轉日期
	 * 
	 * @param dt
	 *            日期字符串
	 * @param dateType
	 *            日期類型
	 * @see DateType
	 * @return 日期對象
	 */
	public static Date parseDate(String dt, int dateType) {
		Date rd = null;
		try {
			if (dt == null || dt == "") {
				log.warn("日期不能為:" + dt);
			} else {
				boolean isFail = false;
				String _val_format = "【" + dt + "】不是一個有效的日期格式\n支持日期格式如下:\n";
				if (dateType == DateType.DATE_TYPE_y4) {
					_val_format += "【yyyy】";
				} else if (dateType == DateType.DATE_TYPE_y4_MM) {
					_val_format += "【yyyyMM或yyyy-MM或yyyy/MM或yyyy MM】";
				} else if (dateType == DateType.DATE_TYPE_y4_MM_dd) {
					_val_format += "【yyyyMMdd或yyyy-MM-dd或yyyy/MM/dd或yyyy MM dd】";
				} else if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH) {
					_val_format += "【yyyyMMddhh或yyyy-MM-dd hh或yyyy/MM/dd hh或yyyy MM dd hh】";
				} else if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm) {
					_val_format += "【yyyyMMddhhmm或yyyy-MM-dd hh:mm或yyyy/MM/dd hh:mm或yyyy MM dd hh:mm】";
				} else if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm_ss) {
					_val_format += "【yyyyMMddhhmmss或yyyy-MM-dd hh:mm:ss或yyyy/MM/dd hh:mm:ss或yyyy MM dd hh:mm:ss】";
				} else {
					dateType = DateType.DATE_TYPE_ALL;
					_val_format += "【yyyy】";
					_val_format += "【yyyyMM或yyyy-MM或yyyy/MM或yyyy MM】";
					_val_format += "【yyyyMMdd或yyyy-MM-dd或yyyy/MM/dd或yyyy MM dd】";
					_val_format += "【yyyyMMddhh或yyyy-MM-dd hh或yyyy/MM/dd hh或yyyy MM dd hh】";
					_val_format += "【yyyyMMddhhmm或yyyy-MM-dd hh:mm或yyyy/MM/dd hh:mm或yyyy MM dd hh:mm】";
					_val_format += "【yyyyMMddhhmmss或yyyy-MM-dd hh:mm:ss或yyyy/MM/dd hh:mm:ss或yyyy MM dd hh:mm:ss】";
				}
				String datePat = "";
				datePat = "^(\\d{4})(/|-| )(\\d{1,2})(\\2)([0-9]{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})$";
				Matcher mt = Pattern.compile(datePat).matcher(dt);
				String year = "";
				String month = "";
				String day = "";
				String hour = "";
				String minute = "";
				String second = "";
				if (mt.find()) {
					if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm_ss || dateType == DateType.DATE_TYPE_ALL) {
						year = mt.group(1);
						month = mt.group(3);
						day = mt.group(5);
						hour = mt.group(6);
						minute = mt.group(7);
						second = mt.group(8);
					} else {
						isFail = true;
					}
				} else {
					datePat = "^(\\d{14})$";
					mt = Pattern.compile(datePat).matcher(dt);
					if (mt.find()) {
						if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm_ss || dateType == DateType.DATE_TYPE_ALL) {
							year = dt.substring(0, 4);
							month = dt.substring(4, 6);
							day = dt.substring(6, 8);
							hour = dt.substring(8, 10);
							minute = dt.substring(10, 12);
							second = dt.substring(12, 14);
						} else {
							isFail = true;
						}

					} else {
						datePat = "^(\\d{4})(/|-| )(\\d{1,2})(\\2)(\\d{1,2}) (\\d{1,2}):(\\d{1,2})$";
						mt = Pattern.compile(datePat).matcher(dt);
						if (mt.find()) {
							if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm || dateType == DateType.DATE_TYPE_ALL) {
								year = mt.group(1);
								month = mt.group(3);
								day = mt.group(5);
								hour = mt.group(6);
								minute = mt.group(7);
								second = "0";
							} else {
								isFail = true;
							}
						} else {
							datePat = "^(\\d{12})$";
							mt = Pattern.compile(datePat).matcher(dt);
							if (mt.find()) {
								if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH_mm || dateType == DateType.DATE_TYPE_ALL) {
									year = dt.substring(0, 4);
									month = dt.substring(4, 6);
									day = dt.substring(6, 8);
									hour = dt.substring(8, 10);
									minute = dt.substring(10, 12);
									second = "0";
								} else {
									isFail = true;
								}
							} else {
								datePat = "^(\\d{4})(/|-| )(\\d{1,2})(\\2)(\\d{1,2}) (\\d{1,2})$";
								mt = Pattern.compile(datePat).matcher(dt);
								if (mt.find()) {
									if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH || dateType == DateType.DATE_TYPE_ALL) {
										year = mt.group(1);
										month = mt.group(3);
										day = mt.group(5);
										hour = mt.group(6);
										minute = "0";
										second = "0";
									} else {
										isFail = true;
									}
								} else {
									datePat = "^(\\d{10})$";
									mt = Pattern.compile(datePat).matcher(dt);
									if (mt.find()) {
										if (dateType == DateType.DATE_TYPE_y4_MM_dd_HH || dateType == DateType.DATE_TYPE_ALL) {
											year = dt.substring(0, 4);
											month = dt.substring(4, 6);
											day = dt.substring(6, 8);
											hour = dt.substring(8, 10);
											minute = "0";
											second = "0";
										} else {
											isFail = true;
										}
									} else {
										datePat = "^(\\d{4})(/|-| )(\\d{1,2})(\\2)(\\d{1,2})$";
										mt = Pattern.compile(datePat).matcher(dt);
										if (mt.find()) {
											if (dateType == DateType.DATE_TYPE_y4_MM_dd || dateType == DateType.DATE_TYPE_ALL) {
												year = mt.group(1);
												month = mt.group(3);
												day = mt.group(5);
												hour = "0";
												minute = "0";
												second = "0";
											} else {
												isFail = true;
											}
										} else {
											datePat = "^(\\d{8})$";
											mt = Pattern.compile(datePat).matcher(dt);
											if (mt.find()) {
												if (dateType == DateType.DATE_TYPE_y4_MM_dd || dateType == DateType.DATE_TYPE_ALL) {
													year = dt.substring(0, 4);
													month = dt.substring(4, 6);
													day = dt.substring(6, 8);
													hour = "0";
													minute = "0";
													second = "0";
												} else {
													isFail = true;
												}
											} else {
												datePat = "^(\\d{4})(/|-| )(\\d{1,2})$";
												mt = Pattern.compile(datePat).matcher(dt);
												if (mt.find()) {
													if (dateType == DateType.DATE_TYPE_y4_MM || dateType == DateType.DATE_TYPE_ALL) {
														year = mt.group(1);
														month = mt.group(3);
														day = "1";
														hour = "0";
														minute = "0";
														second = "0";
													} else {
														isFail = true;
													}
												} else {
													datePat = "^(\\d{6})$";
													mt = Pattern.compile(datePat).matcher(dt);
													if (mt.find()) {
														if (dateType == DateType.DATE_TYPE_y4_MM || dateType == DateType.DATE_TYPE_ALL) {
															year = dt.substring(0, 4);
															month = dt.substring(4, 6);
															day = "1";
															hour = "0";
															minute = "0";
															second = "0";
														} else {
															isFail = true;
														}
													} else {
														datePat = "^(\\d{4})$";
														mt = Pattern.compile(datePat).matcher(dt);
														if (mt.find()) {
															if (dateType == DateType.DATE_TYPE_y4 || dateType == DateType.DATE_TYPE_ALL) {
																year = mt.group(1);
																month = "1";
																day = "1";
																hour = "0";
																minute = "0";
																second = "0";
															} else {
																isFail = true;
															}
														} else {
															_val_format = "【" + dt + "】不是一個有效的日期格式";
															isFail = true;
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
				if (isFail) {
					log.warn(_val_format);
				} else {
					int iyear = Integer.parseInt(year);
					int imonth = Integer.parseInt(month);
					int iday = Integer.parseInt(day);
					int ihour = Integer.parseInt(hour);
					int iminute = Integer.parseInt(minute);
					int isecond = Integer.parseInt(second);
					if (iyear < 1 || iyear > 9999) {
						_val_format = "年份必須在0001-9999之間";
						isFail = true;
					}
					if (imonth < 1 || imonth > 12) {
						_val_format = "月份必須在01-12之間";
						isFail = true;
					}
					if (iday < 1 || iday > 31) {
						_val_format = "天數必須在01-31之間";
						isFail = true;
					}
					if ((imonth == 4 || imonth == 6 || imonth == 9 || imonth == 11) && iday == 31) {
						_val_format = month + "月不能有31天!";
						isFail = true;
					}
					if (imonth == 2) {
						boolean isleap = (iyear % 4 == 0 && iyear % 100 != 0) || iyear % 400 == 0;
						if (isleap) {
							if (iday > 29) {
								_val_format = "閏年[" + year + "]年的2月不能有[" + day + "]天!";
								isFail = true;
							}
						} else {
							if (iday > 28) {
								_val_format = "平年[" + year + "]年的2月不能有[" + day + "]天!";
								isFail = true;
							}
						}
					}
					if (ihour < 0 || ihour > 23) {
						_val_format = "小時必須在00-23之間";
						isFail = true;
					}
					if (iminute < 0 || iminute > 59) {
						_val_format = "分鐘必須在00-59之間";
						isFail = true;
					}
					if (isecond < 0 || isecond > 59) {
						_val_format = "秒鐘必須在00-59之間";
						isFail = true;
					}
					if (isFail) {
						log.warn(_val_format);
					} else {
						// //("調試字符串如下【開始】\n" + sb.toString() + "\n調試字符串如下【結束】");
						Calendar calendar = Calendar.getInstance();
						calendar.setTimeInMillis(0);
						calendar.set(iyear, imonth - 1, iday, ihour, iminute, isecond);
						rd = calendar.getTime();
					}
				}
			}
		} catch (Exception e) {
			rd = null;
			log.error(e.getMessage());
		}
		return rd;
	}

	/**
	 * 日期解析字符串
	 * 
	 * @param odt
	 *            日期對象
	 * @return 返回格式化后的日期字符串,如果出錯返回當前日期對象
	 */
	public static String dateParse(Object odt) {
		return dateParse(odt, null);
	}

	/**
	 * 日期解析字符串
	 * 
	 * @param odt
	 *            日期對象
	 * @param partten
	 *            日期格式
	 *            <p>
	 *            yyyy年MM月dd日HH時mm分ss秒SSS毫秒p(1-7=>周一-周日)w x q季度
	 *            </p>
	 * @return 返回格式化后的日期字符串,如果出錯返回當前日期對象
	 */
	public static String dateParse(Object odt, String partten) {
		try {
			if (odt == null)
				return "";
			Date dt = null;
			if (odt instanceof Date) {
				dt = (Date) odt;
			} else if (odt instanceof Timestamp) {
				Timestamp ts = (Timestamp) odt;
				dt = new Date(ts.getTime());
			} else if (odt instanceof Calendar) {
				Calendar cal = (Calendar) odt;
				dt = cal.getTime();
			} else if (odt instanceof String) {
				dt = parseDate(String.valueOf(odt));
				if (dt == null) {
					log.error("無效的日期:" + odt);
					return "";
				}
			} else {
				log.error("無效的日期:" + odt);
				return String.valueOf(odt);
			}
			return getParseDt(dt, partten);
		} catch (Exception e) {
			log.error(e.getMessage());
			return String.valueOf(odt);
		}
	}

	/**
	 * 日期解析字符串
	 * 
	 * @param dt
	 *            日期對象
	 * @param partten
	 *            日期格式
	 *            <p>
	 *            yyyy年MM月dd日HH時mm分ss秒SSS毫秒p(1-7=>周一-周日)w x q季度
	 *            </p>
	 * @return 返回格式化后的日期字符串,如果出錯返回當前日期對象
	 */
	public static String getParseDt(Date dt, String partten) {
		if (dt == null)
			return "";
		if (partten == null || "".equals(partten)) {
			partten = "yyyy年MM月dd日HH時mm分ss秒SSS毫秒p(1-7=>周一-周日)w x q季度";
		}
		Calendar cal = Calendar.getInstance();
		cal.setTime(dt);
		String year = "" + cal.get(Calendar.YEAR);
		String month = "" + (cal.get(Calendar.MONTH) + 1);
		String day = "" + cal.get(Calendar.DATE);
		String hour = "" + cal.get(Calendar.HOUR_OF_DAY);
		String minute = "" + cal.get(Calendar.MINUTE);
		String second = "" + cal.get(Calendar.SECOND);
		String millisecond = "" + cal.get(Calendar.MILLISECOND);
		// 星期標識【0-6=>周日-周六】=>返回【1-7=>周一-周日】
		int week_of_month = cal.get(Calendar.DAY_OF_WEEK) - 1;
		// 星期值
		String ws = "";
		switch (week_of_month) {
		case 1:
			ws += "1";
			break;
		case 2:
			ws += "2";
			break;
		case 3:
			ws += "3";
			break;
		case 4:
			ws += "4";
			break;
		case 5:
			ws += "5";
			break;
		case 6:
			ws += "6";
			break;
		case 0:
			ws += "7";
			break;
		default:
			ws = "";
			break;
		}
		// 上下午
		int r = cal.get(Calendar.AM_PM);
		String ap = "";
		if (r == Calendar.AM) {
			ap = "上午";
		}
		if (r == Calendar.PM) {
			ap = "下午";
		}
		// 季度值
		int tempMonth = TypeUtil.Primitive.intValue(month);
		// quarter季度
		String q = "";
		if (tempMonth >= 1 && tempMonth <= 3) {
			q = "1";
		} else if (tempMonth >= 4 && tempMonth <= 6) {
			q = "2";
		} else if (tempMonth >= 7 && tempMonth <= 9) {
			q = "3";
		} else if (tempMonth >= 10 && tempMonth <= 12) {
			q = "4";
		}
		String matStr = "";
		// 替換4位年
		matStr = "(y|Y){4}";
		Matcher mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(addForLR(year, "0", 4));
		// 替換2位月
		matStr = "M{2}";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(addForLR(month, "0", 2));
		// 替換季度
		matStr = "(q|Q)";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(q);
		// 替換2位天
		matStr = "d{2}";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(addForLR(day, "0", 2));
		// 替換2位小時
		matStr = "(h|H){2}(24)?";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(addForLR(hour, "0", 2));
		// 替換2位分
		matStr = "m{2}";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(addForLR(minute, "0", 2));
		// 替換2位秒
		matStr = "s{2}";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(addForLR(second, "0", 2));
		// 替換3位毫秒
		matStr = "S{3}";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(addForLR(millisecond, "0", 3));
		// 替換星期
		matStr = "w|W";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(ws);
		// 替換星期
		matStr = "x|X";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(getDescWeekday(ws));
		// 替換上下午
		matStr = "p|P";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(ap);
		// 替換2位年
		matStr = "(y|Y){2}";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(year.length() > 2 ? year.substring(year.length() - 2, year.length()) : year);
		// 替換1位月
		matStr = "M";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(month);
		// 替換1位天
		matStr = "d";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(day);
		// 替換1位小時
		matStr = "(h|H){1}(12)?";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(addForLR((Integer.parseInt(hour) > 12 ? "" + Math.abs(Integer.parseInt(hour) - 12) : hour), "0", 2));
		// matStr = "(h|H)12";
		// mt = Pattern.compile(matStr).matcher(partten);
		// partten = mt.replaceAll(Integer.parseInt(hour) > 12 ? "" + Math.abs(Integer.parseInt(hour) - 12) : hour);
		// matStr = "(h|H)24";
		// mt = Pattern.compile(matStr).matcher(partten);
		// partten = mt.replaceAll(hour);
		// 替換1位分
		matStr = "m";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(minute);
		// 替換1位秒
		matStr = "s";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(second);
		// 替換1位毫秒
		matStr = "S";
		mt = Pattern.compile(matStr).matcher(partten);
		partten = mt.replaceAll(millisecond);
		// 最終結果
		return partten;
	}

	/**
	 * 數字前補0可以補"0"也可以補""
	 * 
	 * @param oldStr
	 *            舊字符串
	 * @param addStr
	 *            添加字符串
	 * @param strLength
	 *            字符長度
	 * @param isLeft
	 *            <p>
	 *            true:左補字符
	 *            </p>
	 *            <p>
	 *            false:右補字符
	 *            </p>
	 * @author zhangjun
	 * @return 重組后的數據
	 */
	public static String addForLR(String oldStr, String addStr, int strLength, boolean isLeft) {
		if (oldStr == null || addStr == null)
			return oldStr;
		int strLen = oldStr.length();
		if (strLen < strLength) {
			while (strLen < strLength) {
				StringBuffer sb = new StringBuffer();
				if (isLeft) {
					sb.append(addStr).append(oldStr);
				} else {
					sb.append(oldStr).append(addStr);
				}
				oldStr = sb.toString();
				strLen = oldStr.length();
			}
		}

		return oldStr;
	}

	/**
	 * 數字前補0可以補"0"也可以補""
	 * 
	 * @param oldStr
	 *            舊字符串
	 * @param addStr
	 *            添加字符串
	 * @param strLength
	 *            字符長度
	 * @author zhangjun
	 * @return 重組后的數據
	 */
	public static String addForLR(String oldStr, String addStr, int strLength) {
		return addForLR(oldStr, addStr, strLength, true);
	}

	/**
	 * 計算日期范圍
	 * 
	 * @param startTime
	 *            開始日期對象
	 * @param endTime
	 *            結束日期對象
	 * @param rangeType
	 *            范圍類型
	 * @param ymdhms
	 *            年月日時分秒
	 * @param dateType
	 *            日期類型
	 */
	public static String dateRangeFlg(Object startTime, Object endTime, int rangeType, int ymdhms, int dateType) {
		String sstartTime = startTime == null ? "" : String.valueOf(startTime);
		String sendTime = endTime == null ? "" : String.valueOf(endTime);
		String rtn_1 = "1";
		String rtn_2 = "2";
		String rtn_3 = "3";
		String rtn_4 = "4";
		String rtn_5 = "5";
		String rtn_6 = "6";
		try {
			if ("".equals(sstartTime)) {
				return rtn_4;
			}
			if ("".equals(sendTime)) {
				return rtn_5;
			}
			Date checktime1 = null;
			Date checktime2 = null;
			if (startTime instanceof Date) {
				checktime1 = (Date) startTime;
			} else {
				checktime1 = parseDate(sstartTime, dateType);
			}
			if (checktime1 == null) {
				return rtn_4;
			}
			if (endTime instanceof Date) {
				checktime2 = (Date) endTime;
			} else {
				checktime2 = parseDate(sendTime, dateType);
			}
			if (checktime2 == null) {
				return rtn_5;
			}
			if (startTime == "" || endTime == "")
				return "";
			Calendar cal1 = Calendar.getInstance();
			cal1.setTimeInMillis(0);
			cal1.setTime(checktime1);
			Calendar cal2 = Calendar.getInstance();
			cal2.setTimeInMillis(0);
			cal2.setTime(checktime2);
			long flg = cal2.getTimeInMillis() - cal1.getTimeInMillis();
			if (flg < 0) {
				// //("開始時間不能大于結束時間!");
				return rtn_6;
			}
			if (rangeType == DateType.RANGE_TYPE_y) {
				cal1.set(Calendar.YEAR, cal1.get(Calendar.YEAR) + ymdhms);
				// v_typeMsg = "年";
			} else if (rangeType == DateType.RANGE_TYPE_M) {
				cal1.set(Calendar.MONTH, cal1.get(Calendar.MONTH) + ymdhms);
				// v_typeMsg = "個月";
			} else if (rangeType == DateType.RANGE_TYPE_d) {
				cal1.set(Calendar.DATE, cal1.get(Calendar.DATE) + ymdhms);
				// v_typeMsg = "天";
			} else if (rangeType == DateType.RANGE_TYPE_H) {
				cal1.set(Calendar.HOUR_OF_DAY, cal1.get(Calendar.HOUR_OF_DAY) + ymdhms);
				// v_typeMsg = "小時";
			} else if (rangeType == DateType.RANGE_TYPE_m) {
				cal1.set(Calendar.MINUTE, cal1.get(Calendar.MINUTE) + ymdhms);
				// v_typeMsg = "分鐘";
			} else if (rangeType == DateType.RANGE_TYPE_s) {
				cal1.set(Calendar.SECOND, cal1.get(Calendar.SECOND) + ymdhms);
				// v_typeMsg = "秒鐘";
			} else {
				// //("類型值不正確,請看下面提示\ny:年,m1:月,d:日,h:時,m2:分,s:秒");
				return rtn_3;
			}
			flg = cal2.getTimeInMillis() - cal1.getTimeInMillis();
			if (flg > 0) {
				// //("開始時間和結束時間相差不能超過" + ymdhms + v_typeMsg + "!");
				return rtn_1;
			} else {
				return rtn_2;
			}
		} catch (Exception e) {
			return rtn_3;
		}

	}

	/**
	 * Calendar 轉換為 Date
	 * 
	 * @return date日期
	 */
	public static Date calToDate() {
		// (1) Calendar轉化為Date
		Calendar cal = Calendar.getInstance();
		return calToDate(cal);
	}

	/**
	 * Calendar 轉換為 Date
	 * 
	 * @param cal
	 *            Calendar日期
	 * @return date日期
	 */
	public static Date calToDate(Calendar cal) {
		// (1) Calendar轉化為Date
		Date date = cal.getTime();
		return date;
	}

	/**
	 * Date 轉換為 Calendar
	 * 
	 * @return Calendar日期
	 */
	public static Calendar dateToCal() {
		// (2) Date轉化為Calendar
		Date date = new Date();
		return dateToCal(date);
	}

	/**
	 * Date 轉換為 Calendar
	 * 
	 * @param date
	 *            date日期
	 * @return Calendar日期
	 */
	public static Calendar dateToCal(Date date) {
		// (2) Date轉化為Calendar
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		return cal;
	}

	/**
	 * 相差x年又y天
	 * 
	 * @param sd
	 *            開始日期
	 * @param ed
	 *            結束日期
	 * @author 張軍
	 * @date 2015-11-03 21:59:00
	 * @modifiyNote
	 * @version 1.0
	 * @return
	 * 
	 */
	public static String diffYearAndDay(Date startDate, Date endDate) {
		if (startDate == null || endDate == null) {
			return "?天";
		}
		long diffDate = DateUtil.diffDay(startDate, endDate);
		int year = 0;
		while (diffDate > 365) {
			diffDate -= 365;
			year++;
		}
		if (year > 0) {
			return year + "年又" + diffDate + "天";
		} else {
			return diffDate + "天";
		}
	}

	/**
	 * 相差日-秒
	 * 
	 * @param sd
	 *            開始日期
	 * @param ed
	 *            結束日期
	 * @return 返回值為:{天, 時, 分, 秒}
	 */
	public static long[] diffDayToSecond(Date sd, Date ed) {
		Date newSd = new Date(sd.getTime());
		Date newEd = new Date(ed.getTime());
		long diff = newEd.getTime() - newSd.getTime();
		long day = 0;
		long hour = 0;
		long min = 0;
		long sec = 0;
		day = diff / (24 * 60 * 60 * 1000);
		hour = (diff / (60 * 60 * 1000) - day * 24);
		min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
		sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
		long[] times = { day, hour, min, sec };
		return times;
	}

	/**
	 * 相差日
	 * 
	 * @param sd
	 *            開始日期
	 * @param ed
	 *            結束日期
	 * @return 相差值
	 */
	public static long diffDay(Date sd, Date ed) {
		Date newSd = new Date(sd.getTime());
		Date newEd = new Date(ed.getTime());
		long diff = newEd.getTime() - newSd.getTime();
		return diff / (24 * 60 * 60 * 1000);
	}

	/**
	 * 加日
	 * 
	 * @param d
	 *            日期
	 * @param day
	 *            天數
	 * @return 計算后的日期
	 */
	public static Date addDay(Date d, int day) {
		Date newD = new Date(d.getTime());
		newD.setTime(newD.getTime() + (long) day * 86400000L);
		return newD;
	}

	/**
	 * 加月
	 * 
	 * @param d
	 *            日期
	 * @param month
	 *            月數
	 * @return 計算后的日期
	 */
	public static Date addMonth(Date d, int month) {
		Date newD = new Date(d.getTime());
		GregorianCalendar gval = new GregorianCalendar();
		gval.setTime(newD);
		gval.add(2, month);
		newD.setTime(gval.getTime().getTime());
		return newD;
	}

	/**
	 * 加年
	 * 
	 * @param d
	 *            日期
	 * @param year
	 *            年數
	 * @return 計算后的日期
	 */
	public static Date addYear(Date d, int year) {
		Date newD = new Date(d.getTime());
		GregorianCalendar gval = new GregorianCalendar();
		gval.setTime(newD);
		gval.add(1, year);
		newD.setTime(gval.getTime().getTime());
		return newD;
	}

	/**
	 * 相差時
	 * 
	 * @param sd
	 *            開始日期
	 * @param ed
	 *            結束日期
	 * @return 相差值
	 */
	public static long diffHour(Date sd, Date ed) {
		Date newSd = new Date(sd.getTime());
		Date newEd = new Date(ed.getTime());
		long diff = newEd.getTime() - newSd.getTime();
		return diff / (60 * 60 * 1000);
	}

	/**
	 * 加小時
	 * 
	 * @param d
	 *            日期
	 * @param hour
	 *            小時數
	 * @return 計算后的日期
	 */
	public static Date addHour(Date d, int hour) {
		Date newD = new Date(d.getTime());
		newD.setTime(newD.getTime() + (long) hour * 3600000L);
		return newD;
	}

	/**
	 * 相差分
	 * 
	 * @param sd
	 *            開始日期
	 * @param ed
	 *            結束日期
	 * @return 相差值
	 */
	public static long diffMinute(Date sd, Date ed) {
		Date newSd = new Date(sd.getTime());
		Date newEd = new Date(ed.getTime());
		long diff = newEd.getTime() - newSd.getTime();
		return diff / (60 * 1000);
	}

	/**
	 * 加分
	 * 
	 * @param d
	 *            日期
	 * @param minute
	 *            分數
	 * @return 計算后的日期
	 */
	public static Date addMinute(Date d, int minute) {
		Date newD = new Date(d.getTime());
		newD.setTime(newD.getTime() + (long) minute * 60000L);
		return newD;
	}

	/**
	 * 相差秒
	 * 
	 * @param sd
	 *            開始日期
	 * @param ed
	 *            結束日期
	 * @return 相差值
	 */
	public static long diffSecond(Date sd, Date ed) {
		Date newSd = new Date(sd.getTime());
		Date newEd = new Date(ed.getTime());
		long diff = newEd.getTime() - newSd.getTime();
		return diff / (1000);
	}

	/**
	 * 加秒
	 * 
	 * @param d
	 *            日期
	 * @param second
	 *            秒數
	 * @return 計算后的日期
	 */
	public static Date addSecond(Date d, int second) {
		Date newD = new Date(d.getTime());
		newD.setTime(newD.getTime() + (long) second * 1000L);
		return newD;
	}

	/**
	 * 加毫秒
	 * 
	 * @param d
	 *            日期
	 * @param minSecond
	 *            毫秒數
	 * @return 計算后的日期
	 */
	public static Date addMinSecond(Date d, long minSecond) {
		Date newD = new Date(d.getTime());
		newD.setTime(newD.getTime() + minSecond * 1L);
		return newD;
	}

	/**
	 * 將元數據前補零,補后的總長度為指定的長度,以字符串的形式返回
	 * 
	 * @param sourceData
	 *            源數據
	 * @param formatLength
	 *            長度
	 * @return 重組后的數據
	 */
	public static String frontCompWithZore(int sourceData, int formatLength) {
		/*
		 * 0 指前面補充零 formatLength 字符總長度為 formatLength d 代表為正數。
		 */
		String newString = String.format("%0" + formatLength + "d", sourceData);
		return newString;
	}

	/**
	 * 毫秒轉時分秒毫秒
	 * 
	 * @param millis
	 * @author 張軍
	 * @date 2015-11-03 21:59:00
	 * @modifiyNote
	 * @version 1.0
	 * @return
	 */
	public static Map<String, Integer> millisToHmsS(int millis) {
		Map<String, Integer> values = new HashMap<String, Integer>();
		// 時
		int h = 0;
		// 分
		int m = 0;
		// 秒
		int s = 0;
		// 毫秒
		int S = 0;
		if (millis <= 1000) {
			S = millis;
		} else {
			int second = millis / 1000;
			if (millis % 1000 != 0) {
				// 毫秒數
				S = millis % 1000;
			}
			if (second > 3600) {
				// 如果大于3600秒
				int temp = second % 3600;
				h = second / 3600;
				if (temp != 0) {
					if (temp > 60) {
						m = temp / 60;
						if (temp % 60 != 0) {
							s = temp % 60;
						}
					} else {
						s = temp;
					}
				}
			} else {
				// 如果小于等于3600秒
				m = second / 60;
				if (second % 60 != 0) {
					s = second % 60;
				}
			}
		}
		// System.out.println(h + "時" + m + "分" + s + "秒" + S + "毫秒");
		values.put("h", h);
		values.put("m", m);
		values.put("s", s);
		values.put("S", S);
		return values;
	}
}



更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩高清一区二区三区 | 99久久久免费精品免费 | 久久国产精品自在自线 | 亚洲一区有码 | 免费特黄一级欧美大片 | 国产欧美一区二区三区观看 | 国产欧美日韩一区 | 在线视频 自拍 | 久久视频在线观看免费 | 天天舔日日干 | 日本在线不卡免 | 久久午夜影视 | 男人天堂视频网 | 免费色片网站 | 奇米影音第四色 | 亚洲日韩精品欧美一区二区一 | 欧美大屁股精品毛片视频 | 久久综合九色综合97欧美 | 热久久最新视频 | 美女日日日 | 四虎影院精品 | 国产精品麻豆一区二区 | 免费观看日本高清a毛片 | 老色鬼a∨在线视频在线观看 | 神马我不卡在线观看 | 日本猛妇色xxxxx在线 | 香港aa三级久久三级不卡 | 国产片欧美片亚洲片久久综合 | 日韩欧美 在线播放 | 久热视线观看免费视频 | 婷婷在线视频 | 亚洲一级毛片在线观 | 在线亚洲日产一区二区 | 深夜免费视频 | 国产欧美精品综合一区 | 精品一区二区久久久久久久网精 | 欧美一级欧美三级在线观看 | 日本人成年视频在线观看 | 狠狠干天天爽 | 亚洲黄色视屏 | 国产成人免费全部网站 |