1. java.util.*;
2. import java.text.*;
3. import java.util.Calendar;
4.
5. public class VeDate {
6. /**
7. * 获取现在时间
8. *
9. * @return 返回时间类型 yyyy-MM-dd HH:mm:ss
10. */
11. public static Date getNowDate() {
12. Date currentTime = new Date();
13. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
14. String dateString = formatter.format(currentTime);
15. ParsePosition pos = new ParsePosition(8);
16. Date currentTime_2 = formatter.parse(dateString, pos);
17. return currentTime_2;
18. }
19.
20. /**
21. * 获取现在时间
22. *
23. * @return返回短时间格式 yyyy-MM-dd
24. */
25. public static Date getNowDateShort() {
26. Date currentTime = new Date();
27. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
28. String dateString = formatter.format(currentTime);
29. ParsePosition pos = new ParsePosition(8);
30. Date currentTime_2 = formatter.parse(dateString, pos);
31. return currentTime_2;
32. }
33.
34. /**
35. * 获取现在时间
36. *
37. * @return返回字符串格式 yyyy-MM-dd HH:mm:ss
38. */
39. public static String getStringDate() {
40. Date currentTime = new Date();
41. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
42. String dateString = formatter.format(currentTime);
43. return dateString;
44. }
45.
46. /**
47. * 获取现在时间
48. *
49. * @return 返回短时间字符串格式yyyy-MM-dd
50. */
51. public static String getStringDateShort() {
52. Date currentTime = new Date();
53. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
54. String dateString = formatter.format(currentTime);
55. return dateString;
56. }
57.
58. /**
59. * 获取时间 小时:分;秒 HH:mm:ss
60. *
61. * @return
62. */
63. public static String getTimeShort() {
64. SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
65. Date currentTime = new Date();
66. String dateString = formatter.format(currentTime);
67. return dateString;
68. }
69.
70. /**
71. * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
72. *
73. * @param strDate
74. * @return
75. */
76. public static Date strToDateLong(String strDate) {
77. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
78. ParsePosition pos = new ParsePosition(0);
79. Date strtodate = formatter.parse(strDate, pos);
80. return strtodate;
81. }
82.
83. /**
84. * 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss
85. *
86. * @param dateDate
87. * @return
88. */
89. public static String dateToStrLong(java.util.Date dateDate) {
90. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
91. String dateString = formatter.format(dateDate);
92. return dateString;
93. }
94.
95. /**
96. * 将短时间格式时间转换为字符串 yyyy-MM-dd
97. *
98. * @param dateDate
99. * @param k
100. * @return
101. */
102. public static String dateToStr(java.util.Date dateDate) {
103. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
104. String dateString = formatter.format(dateDate);
105. return dateString;
106. }
107.
108. /**
109. * 将短时间格式字符串转换为时间 yyyy-MM-dd
110. *
111. * @param strDate
112. * @return
113. */
114. public static Date strToDate(String strDate) {
115. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
116. ParsePosition pos = new ParsePosition(0);
117. Date strtodate = formatter.parse(strDate, pos);
118. return strtodate;
119. }
120.
121. /**
122. * 得到现在时间
123. *
124. * @return
125. */
126. public static Date getNow() {
127. Date currentTime = new Date();
128. return currentTime;
129. }
130.
131. /**
132. * 提取一个月中的最后一天
133. *
134. * @param day
135. * @return
136. */
137. public static Date getLastDate(long day) {
138. Date date = new Date();
139. long date_3_hm = date.getTime() - 3600000 * 34 * day;
140. Date date_3_hm_date = new Date(date_3_hm);
141. return date_3_hm_date;
142. }
143.
144. /**
145. * 得到现在时间
146. *
147. * @return 字符串 yyyyMMdd HHmmss
148. */
149. public static String getStringToday() {
150. Date currentTime = new Date();
151. SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");
152. String dateString = formatter.format(currentTime);
153. return dateString;
154. }
155.
156. /**
157. * 得到现在小时
158. */
159. public static String getHour() {
160. Date currentTime = new Date();
161. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
162. String dateString = formatter.format(currentTime);
163. String hour;
164. hour = dateString.substring(11, 13);
165. return hour;
166. }
167.
168. /**
169. * 得到现在分钟
170. *
171. * @return
172. */
173. public static String getTime() {
174. Date currentTime = new Date();
175. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
176. String dateString = formatter.format(currentTime);
177. String min;
178. min = dateString.substring(14, 16);
179. return min;
180. }
181.
182. /**
183. * 根据用户传入的时间表示格式,返回当前时间的格式 如果是yyyyMMdd,注意字母y不能大写。
184. *
185. * @param sformat
186. * yyyyMMddhhmmss
187. * @return
188. */
189. public static String getUserDate(String sformat) {
190. Date currentTime = new Date();
191. SimpleDateFormat formatter = new SimpleDateFormat(sformat);
192. String dateString = formatter.format(currentTime);
193. return dateString;
194. }
195.
196. /**
197. * 二个小时时间间的差值,必须保证二个时间都是"HH:MM"的格式,返回字符型的分钟
198. */
199. public static String getTwoHour(String st1, String st2) {
200. String[] kk = null;
201. String[] jj = null;
202. kk = st1.split(":");
203. jj = st2.split(":");
204. if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0]))
205. return "0";
206. else {
207. double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;
208. double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60;
209. if ((y - u) > 0)
210. return y - u + "";
211. else
212. return "0";
213. }
214. }
215.
216. /**
217. * 得到二个日期间的间隔天数
218. */
219. public static String getTwoDay(String sj1, String sj2) {
220. SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
221. long day = 0;
222. try {
223. java.util.Date date = myFormatter.parse(sj1);
224. java.util.Date mydate = myFormatter.parse(sj2);
225. day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
226. } catch (Exception e) {
227. return "";
228. }
229. return day + "";
230. }
231.
232. /**
233. * 时间前推或后推分钟,其中JJ表示分钟.
234. */
235. public static String getPreTime(String sj1, String jj) {
236. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
237. String mydate1 = "";
238. try {
239. Date date1 = format.parse(sj1);
240. long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60;
241. date1.setTime(Time * 1000);
242. mydate1 = format.format(date1);
243. } catch (Exception e) {
244. }
245. return mydate1;
246. }
247.
248. /**
249. * 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数
250. */
251. public static String getNextDay(String nowdate, String delay) {
252. try{
253. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
254. String mdate = "";
255. Date d = strToDate(nowdate);
256. long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;
257. d.setTime(myTime * 1000);
258. mdate = format.format(d);
259. return mdate;
260. }catch(Exception e){
261. return "";
262. }
263. }
264.
265. /**
266. * 判断是否润年
267. *
268. * @param ddate
269. * @return
270. */
271. public static boolean isLeapYear(String ddate) {
272.
273. /**
274. * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
275. * 3.能被4整除同时能被100整除则不是闰年
276. */
277. Date d = strToDate(ddate);
278. GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
279. gc.setTime(d);
280. int year = gc.get(Calendar.YEAR);
281. if ((year % 400) == 0)
282. return true;
283. else if ((year % 4) == 0) {
284. if ((year % 100) == 0)
285. return false;
286. else
287. return true;
288. } else
289. return false;
290. }
291.
292. /**
293. * 返回美国时间格式 26 Apr 2006
294. *
295. * @param str
296. * @return
297. */
298. public static String getEDate(String str) {
299. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
300. ParsePosition pos = new ParsePosition(0);
301. Date strtodate = formatter.parse(str, pos);
302. String j = strtodate.toString();
303. String[] k = j.split(" ");
304. return k[2] + k[1].toUpperCase() + k[5].substring(2, 4);
305. }
306.
307. /**
308. * 获取一个月的最后一天
309. *
310. * @param dat
311. * @return
312. */
313. public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd
314. String str = dat.substring(0, 8);
315. String month = dat.substring(5, 7);
316. int mon = Integer.parseInt(month);
317. if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
318. str += "31";
319. } else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
320. str += "30";
321. } else {
322. if (isLeapYear(dat)) {
323. str += "29";
324. } else {
325. str += "28";
326. }
327. }
328. return str;
329. }
330.
331. /**
332. * 判断二个时间是否在同一个周
333. *
334. * @param date1
335. * @param date2
336. * @return
337. */
338. public static boolean isSameWeekDates(Date date1, Date date2) {
339. Calendar cal1 = Calendar.getInstance();
340. Calendar cal2 = Calendar.getInstance();
341. cal1.setTime(date1);
342. cal2.setTime(date2);
343. int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
344. if (0 == subYear) {
345. if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
346. return true;
347. } else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
348. // 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
349. if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
350. return true;
351. } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
352. if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
353. return true;
354. }
355. return false;
356. }
357.
358. /**
359. * 产生周序列,即得到当前时间所在的年度是第几周
360. *
361. * @return
362. */
363. public static String getSeqWeek() {
364. Calendar c = Calendar.getInstance(Locale.CHINA);
365. String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
366. if (week.length() == 1)
367. week = "0" + week;
368. String year = Integer.toString(c.get(Calendar.YEAR));
369. return year + week;
370. }
371.
372. /**
373. * 获得一个日期所在的周的星期几的日期,如要找出2002年2月3日所在周的星期一是几号
374. *
375. * @param sdate
376. * @param num
377. * @return
378. */
379. public static String getWeek(String sdate, String num) {
380. // 再转换为时间
381. Date dd = VeDate.strToDate(sdate);
382. Calendar c = Calendar.getInstance();
383. c.setTime(dd);
384. if (num.equals("1")) // 返回星期一所在的日期
385. c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
386. else if (num.equals("2")) // 返回星期二所在的日期
387. c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
388. else if (num.equals("3")) // 返回星期三所在的日期
389. c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
390. else if (num.equals("4")) // 返回星期四所在的日期
391. c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
392. else if (num.equals("5")) // 返回星期五所在的日期
393. c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
394. else if (num.equals("6")) // 返回星期六所在的日期
395. c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
396. else if (num.equals("0")) // 返回星期日所在的日期
397. c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
398. return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
399. }
400.
401. /**
402. * 根据一个日期,返回是星期几的字符串
403. *
404. * @param sdate
405. * @return
406. */
407. public static String getWeek(String sdate) {
408. // 再转换为时间
409. Date date = VeDate.strToDate(sdate);
410. Calendar c = Calendar.getInstance();
411. c.setTime(date);
412. // int hour=c.get(Calendar.DAY_OF_WEEK);
413. // hour中存的就是星期几了,其范围 1~7
414. // 1=星期日 7=星期六,其他类推
415. return new SimpleDateFormat("EEEE").format(c.getTime());
416. }
417. public static String getWeekStr(String sdate){
418. String str = "";
419. str = VeDate.getWeek(sdate);
420. if("1".equals(str)){
421. str = "星期日";
422. }else if("2".equals(str)){
423. str = "星期一";
424. }else if("3".equals(str)){
425. str = "星期二";
426. }else if("4".equals(str)){
427. str = "星期三";
428. }else if("5".equals(str)){
429. str = "星期四";
430. }else if("6".equals(str)){
431. str = "星期五";
432. }else if("7".equals(str)){
433. str = "星期六";
434. }
435. return str;
436. }
437.
438. /**
439. * 两个时间之间的天数
440. *
441. * @param date1
442. * @param date2
443. * @return
444. */
445. public static long getDays(String date1, String date2) {
446. if (date1 == null || date1.equals(""))
447. return 0;
448. if (date2 == null || date2.equals(""))
449. return 0;
450. // 转换为标准时间
451. SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
452. java.util.Date date = null;
453. java.util.Date mydate = null;
454. try {
455. date = myFormatter.parse(date1);
456. mydate = myFormatter.parse(date2);
457. } catch (Exception e) {
458. }
459. long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
460. return day;
461. }
462.
463. /**
464. * 形成如下的日历 , 根据传入的一个时间返回一个结构 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是当月的各个时间
465. * 此函数返回该日历第一行星期日所在的日期
466. *
467. * @param sdate
468. * @return
469. */
470. public static String getNowMonth(String sdate) {
471. // 取该时间所在月的一号
472. sdate = sdate.substring(0, 8) + "01";
473.
474. // 得到这个月的1号是星期几
475. Date date = VeDate.strToDate(sdate);
476. Calendar c = Calendar.getInstance();
477. c.setTime(date);
478. int u = c.get(Calendar.DAY_OF_WEEK);
479. String newday = VeDate.getNextDay(sdate, (1 - u) + "");
480. return newday;
481. }
482.
483. /**
484. * 取得数据库主键 生成格式为yyyymmddhhmmss+k位随机数
485. *
486. * @param k
487. * 表示是取几位随机数,可以自己定
488. */
489.
490. public static String getNo(int k) {
491.
492. return getUserDate("yyyyMMddhhmmss") + getRandom(k);
493. }
494.
495. /**
496. * 返回一个随机数
497. *
498. * @param i
499. * @return
500. */
501. public static String getRandom(int i) {
502. Random jjj = new Random();
503. // int suiJiShu = jjj.nextInt(9);
504. if (i == 0)
505. return "";
506. String jj = "";
507. for (int k = 0; k < i; k++) {
508. jj = jj + jjj.nextInt(9);
509. }
510. return jj;
511. }
512.
513. /**
514. *
515. * @param args
516. */
517. public static boolean RightDate(String date) {
518.
519. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
520. ;
521. if (date == null)
522. return false;
523. if (date.length() > 10) {
524. sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
525. } else {
526. sdf = new SimpleDateFormat("yyyy-MM-dd");
527. }
528. try {
529. sdf.parse(date);
530. } catch (ParseException pe) {
531. return false;
532. }
533. return true;
534. }
535.
536. /***************************************************************************
537. * //nd=1表示返回的值中包含年度 //yf=1表示返回的值中包含月份 //rq=1表示返回的值中包含日期 //format表示返回的格式 1
538. * 以年月日中文返回 2 以横线-返回 // 3 以斜线/返回 4 以缩写不带其它符号形式返回 // 5 以点号.返回
539. **************************************************************************/
540. public static String getStringDateMonth(String sdate, String nd, String yf, String rq, String format) {
541. Date currentTime = new Date();
542. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
543. String dateString = formatter.format(currentTime);
544. String s_nd = dateString.substring(0, 4); // 年份
545. String s_yf = dateString.substring(5, 7); // 月份
546. String s_rq = dateString.substring(8, 10); // 日期
547. String sreturn = "";
548. roc.util.MyChar mc = new roc.util.MyChar();
549. if (sdate == null || sdate.equals("") || !mc.Isdate(sdate)) { // 处理空值情况
550. if (nd.equals("1")) {
551. sreturn = s_nd;
552. // 处理间隔符
553. if (format.equals("1"))
554. sreturn = sreturn + "年";
555. else if (format.equals("2"))
556. sreturn = sreturn + "-";
557. else if (format.equals("3"))
558. sreturn = sreturn + "/";
559. else if (format.equals("5"))
560. sreturn = sreturn + ".";
561. }
562. // 处理月份
563. if (yf.equals("1")) {
564. sreturn = sreturn + s_yf;
565. if (format.equals("1"))
566. sreturn = sreturn + "月";
567. else if (format.equals("2"))
568. sreturn = sreturn + "-";
569. else if (format.equals("3"))
570. sreturn = sreturn + "/";
571. else if (format.equals("5"))
572. sreturn = sreturn + ".";
573. }
574. // 处理日期
575. if (rq.equals("1")) {
576. sreturn = sreturn + s_rq;
577. if (format.equals("1"))
578. sreturn = sreturn + "日";
579. }
580. } else {
581. // 不是空值,也是一个合法的日期值,则先将其转换为标准的时间格式
582. sdate = roc.util.RocDate.getOKDate(sdate);
583. s_nd = sdate.substring(0, 4); // 年份
584. s_yf = sdate.substring(5, 7); // 月份
585. s_rq = sdate.substring(8, 10); // 日期
586. if (nd.equals("1")) {
587. sreturn = s_nd;
588. // 处理间隔符
589. if (format.equals("1"))
590. sreturn = sreturn + "年";
591. else if (format.equals("2"))
592. sreturn = sreturn + "-";
593. else if (format.equals("3"))
594. sreturn = sreturn + "/";
595. else if (format.equals("5"))
596. sreturn = sreturn + ".";
597. }
598. // 处理月份
599. if (yf.equals("1")) {
600. sreturn = sreturn + s_yf;
601. if (format.equals("1"))
602. sreturn = sreturn + "月";
603. else if (format.equals("2"))
604. sreturn = sreturn + "-";
605. else if (format.equals("3"))
606. sreturn = sreturn + "/";
607. else if (format.equals("5"))
608. sreturn = sreturn + ".";
609. }
610. // 处理日期
611. if (rq.equals("1")) {
612. sreturn = sreturn + s_rq;
613. if (format.equals("1"))
614. sreturn = sreturn + "日";
615. }
616. }
617. return sreturn;
618. }
619.
620. public static String getNextMonthDay(String sdate, int m) {
621. sdate = getOKDate(sdate);
622. int year = Integer.parseInt(sdate.substring(0, 4));
623. int month = Integer.parseInt(sdate.substring(5, 7));
624. month = month + m;
625. if (month < 0) {
626. month = month + 12;
627. year = year - 1;
628. } else if (month > 12) {
629. month = month - 12;
630. year = year + 1;
631. }
632. String smonth = "";
633. if (month < 10)
634. smonth = "0" + month;
635. else
636. smonth = "" + month;
637. return year + "-" + smonth + "-10";
638. }
639.
640. public static String getOKDate(String sdate) {
641. if (sdate == null || sdate.equals(""))
642. return getStringDateShort();
643.
644. if (!VeStr.Isdate(sdate)) {
645. sdate = getStringDateShort();
646. }
647. // 将“/”转换为“-”
648. sdate = VeStr.Replace(sdate, "/", "-");
649. // 如果只有8位长度,则要进行转换
650. if (sdate.length() == 8)
651. sdate = sdate.substring(0, 4) + "-" + sdate.substring(4, 6) + "-" + sdate.substring(6, 8);
652. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
653. ParsePosition pos = new ParsePosition(0);
654. Date strtodate = formatter.parse(sdate, pos);
655. String dateString = formatter.format(strtodate);
656. return dateString;
657. }
658.
659. public static void main(String[] args) throws Exception {
660. try {
661. //System.out.print(Integer.valueOf(getTwoDay("2006-11-03 12:22:10", "2006-11-02 11:22:09")));
662. } catch (Exception e) {
663. throw new Exception();
664. }
665. //System.out.println("sss");
666. }
667. }