package cn.com.lzt.common.util.calendar; import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /* * 输出万年历 * 设定1900.01.01为起点 1900~2900 项目中使用 */ public class PermanentCalendarInsert { static DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 执行插入年月日星期 public static void main(String[] args) { int Year = 2016; for (int i = 0; i < 20; i++) { Year += 1; getMonth(Year); } } // 判断闰年 static boolean LeapYear(int year) { if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { // 是闰年 return true; } else { return false; } } static final int N = 1900; // 用N表示起始年份 // 获得每月日期 public static void getDate(int Year, int Month) { int n = 1;// 1900年1月1日 是星期一 int month[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 用来存储月份的天数 int year[] = new int[1001]; // 用来存储每年1月1日是星期几 year[0] = n; for (int i = 1; i < year.length; i++) { int days = 365; if (LeapYear(i + N - 1)) {// 如果它的前一年是闰年则需要加366 days = 366; year[i] = (year[i - 1] + days) % 7; } else { year[i] = (year[i - 1] + days) % 7; } } // int Month =1,Year=2017; if (LeapYear(Year)) { // 如果是闰年,2月改为29号 month[2] = 29; } System.out.print("Year:" + Year + ",Month:" + Month + ",[日期:星期],["); for (int i = 1; i <= month[Month]; i++) { int Week = getWeek(Year, Month, i) + 1; if (i != month[Month]) { System.out.print(i + ":" + Week + "],["); } else { System.out.print(i + ":" + Week + "]"); } /*System.out.println("Year:" + Year); System.out.println("Month:" + Month); System.out.println("i:" + i);*/ getUpdateNew(Year, Month, i, Week); } } // 计算输入日期是星期几 // 采用了基姆拉尔森计算公式 // W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 // 在公式中d表示日期中的日数,m表示月份数,y表示年数。 // 注意:在公式中有个与其他公式不同的地方: // 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。 public static int getWeek(int year, int month, int day) { if (month < 3) { month += 12; year--; } return (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7; } // 循环月 public static void getMonth(int Year) { int[] arrayMonth = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; for (int j = 0; j < arrayMonth.length; j++) { getDate(Year, arrayMonth[j]); } } // sql插入 public static int getUpdateNew(int year, int month, int day, int week) { String uuid = generate(); Date date = new Date(); Timestamp createDate = new Timestamp(date.getTime()); String ymdStr = getYmdStr(year, month, day); String dtype = judgeDtype(week); String sql = "insert into t_bus_calendar (id,year,month,day,week,ymd_date,dtype,ifedit,create_name,create_by,create_date) values(" + "'" + uuid + "'," + year + "," + "right(100" + month + ",2)," + day + "," + "'" + String.valueOf(week) + "'," + "DATE_FORMAT('" + ymdStr + "'" + ",'" + "%Y-%c-%d %h:%i:%s'" + ")" + "," + "'" + dtype + "'," + "'0'" + "," + "'管理员','admin','" + createDate + "')"; return JdbcConnection.executeUpdate(sql, new Object[] {}); } // UUID public static String generate() { return java.util.UUID.randomUUID().toString().replace("-", ""); } public static String getYmdStr(int year, int month, int day){ String monthStr = ""; String dayStr = ""; if(String.valueOf(month).length() == 1){ monthStr = "0" + month; }else{ monthStr = String.valueOf(month); } if(String.valueOf(day).length() == 1){ dayStr = "0" + day; }else{ dayStr = String.valueOf(day); } String ymdStr = year + "-" + monthStr + "-" + dayStr; return ymdStr; } public static Date getYmdDate(int year, int month, int day){ String monthStr = ""; String dayStr = ""; if(String.valueOf(month).length() == 1){ monthStr = "0" + month; }else{ monthStr = String.valueOf(month); } if(String.valueOf(day).length() == 1){ dayStr = "0" + day; }else{ dayStr = String.valueOf(day); } String ymdStr = year + "-" + monthStr + "-" + dayStr; Date ymdDate = null; try { ymdDate = sdf.parse(ymdStr); return ymdDate; } catch (ParseException e) { e.printStackTrace(); } return ymdDate; } public static String judgeDtype(int week){ if(week==6 || week==7){ return "1"; } return "0"; } }