PermanentCalendarInsert.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package cn.com.lzt.common.util.calendar;
  2. import java.sql.Timestamp;
  3. import java.text.DateFormat;
  4. import java.text.ParseException;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Date;
  7. /*
  8. * 输出万年历
  9. * 设定1900.01.01为起点
  10. 1900~2900
  11. 项目中使用
  12. */
  13. public class PermanentCalendarInsert {
  14. static DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  15. // 执行插入年月日星期
  16. public static void main(String[] args) {
  17. int Year = 2016;
  18. for (int i = 0; i < 20; i++) {
  19. Year += 1;
  20. getMonth(Year);
  21. }
  22. }
  23. // 判断闰年
  24. static boolean LeapYear(int year) {
  25. if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { // 是闰年
  26. return true;
  27. } else {
  28. return false;
  29. }
  30. }
  31. static final int N = 1900; // 用N表示起始年份
  32. // 获得每月日期
  33. public static void getDate(int Year, int Month) {
  34. int n = 1;// 1900年1月1日 是星期一
  35. int month[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // 用来存储月份的天数
  36. int year[] = new int[1001]; // 用来存储每年1月1日是星期几
  37. year[0] = n;
  38. for (int i = 1; i < year.length; i++) {
  39. int days = 365;
  40. if (LeapYear(i + N - 1)) {// 如果它的前一年是闰年则需要加366
  41. days = 366;
  42. year[i] = (year[i - 1] + days) % 7;
  43. } else {
  44. year[i] = (year[i - 1] + days) % 7;
  45. }
  46. }
  47. // int Month =1,Year=2017;
  48. if (LeapYear(Year)) { // 如果是闰年,2月改为29号
  49. month[2] = 29;
  50. }
  51. System.out.print("Year:" + Year + ",Month:" + Month + ",[日期:星期],[");
  52. for (int i = 1; i <= month[Month]; i++) {
  53. int Week = getWeek(Year, Month, i) + 1;
  54. if (i != month[Month]) {
  55. System.out.print(i + ":" + Week + "],[");
  56. } else {
  57. System.out.print(i + ":" + Week + "]");
  58. }
  59. /*System.out.println("Year:" + Year);
  60. System.out.println("Month:" + Month);
  61. System.out.println("i:" + i);*/
  62. getUpdateNew(Year, Month, i, Week);
  63. }
  64. }
  65. // 计算输入日期是星期几
  66. // 采用了基姆拉尔森计算公式
  67. // W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
  68. // 在公式中d表示日期中的日数,m表示月份数,y表示年数。
  69. // 注意:在公式中有个与其他公式不同的地方:
  70. // 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
  71. public static int getWeek(int year, int month, int day) {
  72. if (month < 3) {
  73. month += 12;
  74. year--;
  75. }
  76. return (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year
  77. / 100 + year / 400) % 7;
  78. }
  79. // 循环月
  80. public static void getMonth(int Year) {
  81. int[] arrayMonth = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
  82. for (int j = 0; j < arrayMonth.length; j++) {
  83. getDate(Year, arrayMonth[j]);
  84. }
  85. }
  86. // sql插入
  87. public static int getUpdateNew(int year, int month, int day, int week) {
  88. String uuid = generate();
  89. Date date = new Date();
  90. Timestamp createDate = new Timestamp(date.getTime());
  91. String ymdStr = getYmdStr(year, month, day);
  92. String dtype = judgeDtype(week);
  93. String sql = "insert into t_bus_calendar (id,year,month,day,week,ymd_date,dtype,ifedit,create_name,create_by,create_date) values("
  94. + "'" + uuid + "',"
  95. + year + ","
  96. + "right(100" + month + ",2),"
  97. + day + ","
  98. + "'" + String.valueOf(week) + "',"
  99. + "DATE_FORMAT('" + ymdStr + "'" + ",'" + "%Y-%c-%d %h:%i:%s'" + ")" + ","
  100. + "'" + dtype + "',"
  101. + "'0'" + ","
  102. + "'管理员','admin','" + createDate + "')";
  103. return JdbcConnection.executeUpdate(sql, new Object[] {});
  104. }
  105. // UUID
  106. public static String generate() {
  107. return java.util.UUID.randomUUID().toString().replace("-", "");
  108. }
  109. public static String getYmdStr(int year, int month, int day){
  110. String monthStr = "";
  111. String dayStr = "";
  112. if(String.valueOf(month).length() == 1){
  113. monthStr = "0" + month;
  114. }else{
  115. monthStr = String.valueOf(month);
  116. }
  117. if(String.valueOf(day).length() == 1){
  118. dayStr = "0" + day;
  119. }else{
  120. dayStr = String.valueOf(day);
  121. }
  122. String ymdStr = year + "-" + monthStr + "-" + dayStr;
  123. return ymdStr;
  124. }
  125. public static Date getYmdDate(int year, int month, int day){
  126. String monthStr = "";
  127. String dayStr = "";
  128. if(String.valueOf(month).length() == 1){
  129. monthStr = "0" + month;
  130. }else{
  131. monthStr = String.valueOf(month);
  132. }
  133. if(String.valueOf(day).length() == 1){
  134. dayStr = "0" + day;
  135. }else{
  136. dayStr = String.valueOf(day);
  137. }
  138. String ymdStr = year + "-" + monthStr + "-" + dayStr;
  139. Date ymdDate = null;
  140. try {
  141. ymdDate = sdf.parse(ymdStr);
  142. return ymdDate;
  143. } catch (ParseException e) {
  144. e.printStackTrace();
  145. }
  146. return ymdDate;
  147. }
  148. public static String judgeDtype(int week){
  149. if(week==6 || week==7){
  150. return "1";
  151. }
  152. return "0";
  153. }
  154. }