java 日历格式转化
标签: java基础
把“日一二三四五六”格式的日历转化为“一二三四五六日”格式。
//Example8_16
import java.util.*;
public class Example8_16
{
public static void main(String[] args)
{
CalendarBean cb = new CalendarBean();
System.out.printf("please input year and month: "); //输入年份和月份
Scanner reader = new Scanner(System.in);
int year = 0, month = 0;
cb.setYear(year = reader.nextInt());
cb.setMonth(month = reader.nextInt());
String [] a = cb.getCalendar(); //返回号码的一维数组
char [] str = "日一二三四五六".toCharArray();
System.out.printf("----------------------------\n%14d.%-2d\n", year, month); //打印表头
System.out.printf("----------------------------\n");
for(char c : str) System.out.printf("%3c", c);
for(int i = 0; i < a.length; i++) //输出数组a
{
if(i % 7 == 0) System.out.println(""); //换行
System.out.printf("%4s", a[i]);
}
}
}
//CalendarBean
import java.util.Calendar;
public class CalendarBean
{
int year = 0, month = 0;
public void setYear(int year)
{
this.year = year;
}
public void setMonth(int month)
{
this.month = month;
}
public String [] getCalendar()
{
String [] a = new String[42]; //日历最多可达6行
Calendar rili = Calendar.getInstance();
rili.set(year, month - 1, 1); //模拟翻日历
int weekDay = rili.get(Calendar.DAY_OF_WEEK) - 1; //计算出1号的星期
int day = 0;
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) day = 31;
if(month == 4 || month == 6 || month == 9 || month == 11) day = 30;
if(month == 2)
{
if(((year % 4 == 0) && (year % 100 != 0)) || year % 400 == 0) day = 29;
else day = 28;
}
for(int i = 0; i < weekDay; i++) a[i] = " "; //日历顺序输出,格式控制
for(int i = weekDay, n = 1; i < weekDay + day; i++)
{
a[i] = String.valueOf(n);
n++;
}
for(int i = weekDay + day; i < a.length; i++) a[i] = " ";
return a;
}
}
原日历测试样例
修改Example8_16.java, CalendarBean.java不变
//Example8_16
import java.util.*;
public class Example8_16
{
public static void main(String[] args)
{
CalendarBean cb = new CalendarBean();
System.out.printf("please input year and month: "); //输入年份和月份
Scanner reader = new Scanner(System.in);
int year = 0, month = 0;
cb.setYear(year = reader.nextInt());
cb.setMonth(month = reader.nextInt());
String [] a = cb.getCalendar();
char [] str = "一二三四五六日".toCharArray();
System.out.printf("----------------------------\n%14d.%-2d\n", year, month); //打印表头
System.out.printf("----------------------------\n");
for(char c : str) System.out.printf("%3c", c);
System.out.println("");
int sunday = 0, six = 0;
//日一二三四五六 -> 一二三四五六日
//有两种情况:(1)原日历第一行第一列为空,也就是a[0] == " ";(2)不为空
if(a[0] == " ") sunday = 7;
for(int i = 1; i < a.length; i++)
{
System.out.printf("%4s", a[i]);
six++;
if(six == 6)
{
if(sunday < a.length) System.out.printf("%4s\n", a[sunday]);
sunday += 7;
i++;
six = 0;
}
}
}
}
修改后的日历测试样例