📄 mydate.java
字号:
/*<%--////////////////////////////////////////////////////GTON原创作品-Struts图书馆管理系统//////////////////////////////////////////////////////////////
////////////所用技术:jsp2.0+servlet2.4+jstl1.1+Struts1.2+sqlserver2000+tomcat5.5/////////////////////////////////////
/////////////////////////////////////////////////////专业制作网站 专业制作毕业设计////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////QQ:27612285//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////Mail:punkwang@126.com////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////WEB:www.98202.com www.630cn.com//////////////////////////////////////////////////////
////////////////////////////////////////////////////qq群:20665503////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////求高薪工作一个有意者联系本人/////////////////////////////////////////////////////////
////////////////////////////////////////////////////Phone:010-81110277(王先生)///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--%>
<%--接 毕业设计业务 网站业务 商业网站 个人网站 商城系统 企业主页 JSP ASP.net PHP !!!
业务种类
网站业务: 商业网站 个人网站 商城系统 企业主页 等中小型网站(asp, jsp ,php ,asp.net)
毕业设计业务:java(j2ee j2se) vb delphi php .net等毕设业务
模块业务:各种中小型模块 java .net
如有需要 价格细谈 QQ:27612285
我的网站
HTTP://www.98202.com
HTTP://www.do3w.com
HTTP://www.201cn.com
HTTP://www.630cn.com--%>
*/package com.gton.util;
import java.text.*;
import java.util.*;
import java.util.logging.SimpleFormatter;
public class MyDate {
public MyDate() {
}
public static String getDate() {
SimpleDateFormat lFormat;
Calendar MyDate = Calendar.getInstance();
MyDate.setTime(new java.util.Date());
java.util.Date date = MyDate.getTime();
lFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String gRtnStr = lFormat.format(date);
return gRtnStr;
}
/** 注意格里历和儒略历交接时的日期差别 */
private static transient int gregorianCutoverYear = 1582;
/** 闰年中每月天数 */
private static final int[] DAYS_P_MONTH_LY = {
31, 29, 31, 30, 31, 30, 31, 31,
30, 31, 30, 31};
/** 平年中每月天数 */
private static final int[] DAYS_P_MONTH_CY = {
31, 28, 31, 30, 31, 30, 31, 31,
30, 31, 30, 31};
/** 代表数组里的年、月、日 */
private static final int Y = 0, M = 1, D = 2;
/** 参与运算用 */
private int[] ymd = null;
/**
* 检查传入的参数是否合法的日期
* @param date
* @throws IllegalArgumentException
*/
public static void validate(String date) throws IllegalArgumentException {
int[] ymd = splitYMD(date);
if (ymd[M] == 0 || ymd[M] > 12) {
throw new IllegalArgumentException("月份数值错误");
}
if (true == isLeapYear(ymd[0])) {
if (ymd[D] == 0 || ymd[D] > DAYS_P_MONTH_LY[ymd[M] - 1]) {
throw new IllegalArgumentException("日期数值错误");
}
} else {
if (ymd[D] == 0 || ymd[D] > DAYS_P_MONTH_CY[ymd[M] - 1]) {
throw new IllegalArgumentException("日期数值错误");
}
}
}
/**
* 检查传入的参数代表的年份是否为闰年
* @param year
* @return
*/
public static boolean isLeapYear(int year) {
return year >= gregorianCutoverYear ?
((year % 4 == 0) && ((year % 100 != 0) ||
(year % 400 == 0))) : // Gregorian
(year % 4 == 0); // Julian
}
/**
* 日期加1天,注意这里没有考虑儒略历和格里历交接时相差的10天
* @param year
* @param month
* @param day
* @return
*/
private int[] addOneDay(int year, int month, int day) {
if (isLeapYear(year)) {
day++;
if (day > DAYS_P_MONTH_LY[month - 1]) {
month++;
if (month > 12) {
year++;
month = 1;
}
day = 1;
}
} else {
day++;
if (day > DAYS_P_MONTH_CY[month - 1]) {
month++;
if (month > 12) {
year++;
month = 1;
}
day = 1;
}
}
int[] ymd = {
year, month, day};
return ymd;
}
/**
* 以循环的方式计算日期加法
* @param date
* @param days
* @return
*/
public String addDaysByLoop(String date, int days) {
validate(date);
int[] ymd = splitYMD(date);
for (int i = 0; i < days; i++) {
ymd = addOneDay(ymd[Y], ymd[M], ymd[D]);
}
return formatYear(ymd[Y]) +
formatMonthDay(ymd[M]) +
formatMonthDay(ymd[D]);
}
/**
* 日期减1天,注意这里没有考虑儒略历和格里历交接时相差的10天
* @param year
* @param month
* @param day
* @return
*/
private int[] reduceOneDay(int year, int month, int day) {
if (isLeapYear(year)) {
day--;
if (day <= 0) {
month--;
if (month < 1) {
year--;
month = 12;
}
day = DAYS_P_MONTH_LY[month - 1];
}
} else {
day--;
if (day <= 0) {
month--;
if (month < 1) {
year--;
month = 12;
}
day = DAYS_P_MONTH_CY[month - 1];
}
}
int[] ymd = {
year, month, day};
return ymd;
}
/**
* 以循环的方式计算日期减法
* @param date
* @param days
* @return
*/
public String reduceDaysByLoop(String date, int days) {
validate(date);
int[] ymd = splitYMD(date);
for (int i = 0; i < days; i++) {
ymd = reduceOneDay(ymd[Y], ymd[M], ymd[D]);
}
return formatYear(ymd[Y]) +
formatMonthDay(ymd[M]) +
formatMonthDay(ymd[D]);
}
/**
* 指定日期加上指定的天数的操作
* @param date
* @param days
* @return
* @throws IllegalArgumentException
*/
public String addDays(Date date, int days) throws IllegalArgumentException {
return addDays(formatDate(date), days);
}
/**
* 指定日期加上指定的天数的操作
* @param date
* @param days
* @return
* @throws IllegalArgumentException
*/
public String addDays(String date, int days) throws
IllegalArgumentException {
validate(date);
ymd = splitYMD(date);
if (isLeapYear(ymd[Y])) {
ymd[D] += days;
if (ymd[D] > DAYS_P_MONTH_LY[ymd[M] - 1]) {
ymd[M]++;
ymd[D] = ymd[D] - DAYS_P_MONTH_LY[ymd[M] - 1 - 1];
if (ymd[M] > 12) {
ymd[M] -= 12;
ymd[Y]++;
}
if (ymd[D] > DAYS_P_MONTH_LY[ymd[M] - 1]) {
addDays(formatYear(ymd[Y]) +
formatMonthDay(ymd[M]) +
formatMonthDay(DAYS_P_MONTH_LY[ymd[M] - 1]),
ymd[D] - DAYS_P_MONTH_LY[ymd[M] - 1]);
}
}
} else {
ymd[D] += days;
if (ymd[D] > DAYS_P_MONTH_CY[ymd[M] - 1]) {
ymd[M]++;
ymd[D] = ymd[D] - DAYS_P_MONTH_CY[ymd[M] - 1 - 1];
if (ymd[M] > 12) {
ymd[M] -= 12;
ymd[Y]++;
}
if (ymd[D] > DAYS_P_MONTH_CY[ymd[M] - 1]) {
addDays(formatYear(ymd[Y]) +
formatMonthDay(ymd[M]) +
formatMonthDay(DAYS_P_MONTH_CY[ymd[M] - 1]),
ymd[D] - DAYS_P_MONTH_CY[ymd[M] - 1]);
}
}
}
return formatYear(ymd[Y]) +
formatMonthDay(ymd[M]) +
formatMonthDay(ymd[D]);
}
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -