本次实验在于测试日期类的一些方法的使用,通常我们会使用Calendar调用getInstance()方法创建对象,
这里也可以使用Calendar的子类 GregorianCalendar类去创建,在这里,模拟实现了,通过运行该代码段,就
能知道今天是几月的几号的星期几了,不多说啦,直接上代码...
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
//import java.util.Locale;
//import java.text.DateFormatSymbols;
/**
* 测试用于模拟手机日历,该程序用于———显示当前月的日历
*
* @author YYCat
*
*/
public class TestImitateCalendar {
public static void main(String[] args){
//
// Locale.setDefault(Locale.CHINESE);
GregorianCalendar calendar = new GregorianCalendar(); //创建格里高利日历对象
/**
* 输出样例eg:2015年7月
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月");
System.out.println(" " + sdf.format(calendar.getTime()));
/**
* 获得当前月、日
*/
int month = calendar.get(Calendar.MONTH) + 1;
int today = calendar.get(Calendar.DAY_OF_MONTH); //获得今天是在这个月的第几天
/**
* 注:
* 打印今天是星期几?的时候注意地区差异
* System.out.println(day=1?7:day-1);
*/
// int w = calendar.get(Calendar.DAY_OF_WEEK)-1;
// int weekday = calendar.get(Calendar.DAY_OF_WEEK) -1; //表示这一天为星期几
//System.out.println("month: " + month);
//System.out.println("today: " + today);
/**
* 返回到本月到第一天,并得到这一天为星期几。
*
* 获得这个月的第一天在该月中是星期几,便于计算空格
*/
calendar.set(Calendar.DAY_OF_MONTH, 1);
int weekday = calendar.get(Calendar.DAY_OF_WEEK);
//today = calendar.get(Calendar.DAY_OF_MONTH);
//System.out.println("today:" + today);
int firstdayOfWeek = calendar.getFirstDayOfWeek();
//System.out.println("weekday: " + weekday);
//System.out.println("firstdayOfWeek:" + firstdayOfWeek);
/**
* 以下功能实现
*/
int indent = 0; //该标示用于表示:本月的一天前的空位,准确定位到具体的那个星期上
/**
* 当本月的第一天不为星期天 时,则
* 移动计算该天距第一天的位置
*/
while(firstdayOfWeek!=weekday){
indent++;
calendar.add(Calendar.DAY_OF_MONTH, -1); //
/* today = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("today:" + today);
居然是30 29 28...
*/
weekday = calendar.get(Calendar.DAY_OF_WEEK); //老是忘掉了减一....目的是将这一天向前移动一天
}
//System.out.println(indent);
//定义一个现实星期的数组
String[] week = {"日","一", "二", "三", "四", "五", "六"};
for(int i=0; i<week.length; i++){//打印星期标题
System.out.printf("%15s",week[i]);
}
System.out.println();
// String[] week = new DateFormatSymbols().getShortWeekdays();
do{
// System.out.printf("%6s", week[weekday+1]); //使用printf("%s", )可以指定空格大小,这尼玛下标...
//System.out.println(weekday);
calendar.add(Calendar.DAY_OF_MONTH, 1);
weekday = calendar.get(Calendar.DAY_OF_WEEK);
}while(weekday!=firstdayOfWeek);
//System.out.println("firstdayOfWeek:" + firstdayOfWeek);
for(int i=0; i<indent; i++){
System.out.print(" ");
}
calendar.set(Calendar.DAY_OF_MONTH, 1);
weekday = calendar.get(Calendar.DAY_OF_WEEK);
//System.out.println(indent);
/**
* 接下来准备好将日期数与对应的星期数对应上
*
* 利用while循环:(month!=calendar.get(Calendar.MONTH))
*
*/
while(month==(calendar.get(Calendar.MONTH)+1)){
int day = calendar.get(Calendar.DAY_OF_MONTH); //获得该天
if(weekday == firstdayOfWeek){
// System.out.println("wed:" + weekday);
System.out.println();
}
//如果是今天的话,在该天数后加个标记#
if(day==today){
System.out.printf("%6s", day+"#");
}else{
System.out.printf("%6s", day);
}
// System.out.print("wed:" + weekday);
//如果到周六,自动换行
calendar.add(Calendar.DAY_OF_MONTH, 1); //天数+1
weekday = calendar.get(Calendar.DAY_OF_WEEK);
}
}
}
运行效果如图:
参考自java Core,接下来我将会把实现模拟时钟功能的代码段继续奉献给大家 |