Java 读文件打印日历

4、在本地一个名为“Date.in”的文本文件中,以**** **形式存放着日期,
其中****为年,**为月(年的位数小于等于4,月的位数小于等于2,中间用空格分开)。
请编一程序, 将该年、月的日历以字符方式表存于本地的“Date.out”中。
例如时间为2011年4月,Date.out中的内容为:
2011 4
Sun Mon Tue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30



public class ex_04 {
static String regEx = "(1|3|5|7|8|10|12)";
static Pattern p;
static Matcher m;

// 判断是否为闰年
static boolean isLeapYear(int year) {
if (year % 400 == 0 || ((year % 4 == 0) && (year % 100 != 0)))
return true;
else
return false;
}

// 获取某月的总天数
static int getDays(int year, int month) {
int day = 0;
String str = String.valueOf(month);
p = Pattern.compile(regEx);
m = p.matcher(str);
boolean b = m.find();

if (b) {
day = 31;
} else if (month == 2) {
if (isLeapYear(year))
day = 29;
else
day = 28;
} else {
day = 30;
}
return day;
}

static void WriteData(String str) throws IOException {
FileWriter fw = new FileWriter("F:\\ExTxt\\dateRiLi.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(str);
bw.newLine();
bw.close();
}

public static void main(String[] args) throws IOException, ParseException {
FileReader fr = new FileReader("F:\\ExTxt\\date.txt");
BufferedReader br = new BufferedReader(fr);

String str = br.readLine();// 读文件内容
String strWriter = "";
int year = Integer.parseInt(str.substring(0, 4));
int month = Integer.parseInt(str.substring(5));

strWriter = year + " " + month;
System.out.println(strWriter);
WriteData(strWriter);// 写文件
strWriter = "";// 清空

strWriter = "Sun\t" + "Mon\t" + "Tue\t" + "Wed\t" + "Thu\t" + "Fri\t"
+ "Sat\t";
System.out.println(strWriter);
WriteData(strWriter);// 写文件
strWriter = "";// 清空

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
Date date = sdf.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);// 设置Calendar的时间

// Calendar中1-星期天,2-星期一,3-星期二,4-星期三,5-星期四,6-星期五,7-星期六
int firstDay_Of_Week = calendar.get(Calendar.DAY_OF_WEEK);// 本月的第一天是星期几
int firstWeek_end = 7 - firstDay_Of_Week + 1;// 本月的第一周结束是几号

// 输入日历的第一行内容
for (int i = 1; i < firstDay_Of_Week; i++) {
strWriter += "\t";
System.out.print("\t");
}
for (int i = 1; i <= firstWeek_end; i++) {
strWriter += i + "\t";
System.out.print(i + "\t");
}
//按行写入到文件
WriteData(strWriter);//写日历的第一行
strWriter = "";// 清空
System.out.println();

int sumDay = getDays(year, month);// 获取本月的总天数
int flag = 0;// 设置标记
for (int i = firstWeek_end + 1; i <= sumDay; i++) {
if (flag == 7) // 当一行输入七个数字时就换行
{
WriteData(strWriter);
System.out.println();
//WriteData("\r\n");//写文件换行
strWriter="";//清空
flag = 0;
}
strWriter+=i + "\t";
System.out.print(i + "\t");
flag++;
}
WriteData(strWriter);//写日历的最后一行
}

}

你可能感兴趣的:(java,F#,sun)