本帖最后由 恨天~无过… 于 2014-5-5 00:02 编辑
- package Date.com.test;
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.util.Date;
- import java.util.Scanner;
- public class Kalendar_day_Test {
- /**
- * @param args
- * @throws ParseException
- * 创建一个现在输入的年份及月份得出此年此月日历
- */
- public static void main(String[] args) throws ParseException {
- // TODO Auto-generated method stub
- Scanner in = new Scanner(System.in);
- System.out.println("请输入现在的年份");
- int year = in.nextInt();
- System.out.println("请输入现在的月份");
- int month = in.nextInt();
- String str = year + "-" + month + "-1";
- print(str, year, month);
- }
- public static void print(String str, int year, int month)
- throws ParseException {
- String str2 = "1900-1-1"; // 设置参照的时间,因为此时间为星期一
- int day = toTimeDay(str, str2);
- System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
- int x = day % 7; // 为了保证前面的空格,模7的余数就是空格数;
- for (int i = 0; i <= x; i++) {
- System.out.print("\t");
- }
- int mon_day = 0;
- if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
- || month == 10 || month == 12) { // 根据月份来判断这个月有多少天
- mon_day = 31;
- } else if (month == 2) {
- if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { // 判断year此年是平年还是瑞年
- mon_day = 29;
- } else {
- mon_day = 28;
- }
- } else {
- mon_day = 30;
- }
- int t = 1;
- for (int i = 1; i <= mon_day; i++) {
- int sum = (day + t) % 7;
- if (sum == 6) {
- System.out.println(i);
- } else {
- System.out.print(i + "\t");
- }
- t++;
- }
- }
- private static int toTimeDay(String str1_date, String str2_date)
- throws ParseException {
- DateFormat dateFormat = DateFormat.getDateInstance(); // 创建DateFormat对象;
- Date date_1 = dateFormat.parse(str1_date); // 根据DateFormat对象的parse方法获取Date对象
- Date date_2 = dateFormat.parse(str2_date);
- long time_1 = date_1.getTime(); // 根据Date对象的方法获取其对象的毫秒值
- long time_2 = date_2.getTime();
- long time = Math.abs(time_1 - time_2); // 用相减的方法获取两时间的时间差,为了随机的时间问题,用Math类的abs绝对值方法
- int day = toDay(time);
- return day;
- }
- private static int toDay(long time) { // 用于把毫秒值转成天数的方法
- // TODO Auto-generated method stub
- int day = (int) (time / 1000 / 60 / 60 / 24);
- return day;
- }
- }
复制代码
但发现当输入6月份时不行,其它的月份都是可行的,这是哪里分析错误,求赐教!!
|