文章标题:java基础课程学习日记(二)之日期问题

来源:互联网 发布:司考民法谁讲得好 知乎 编辑:程序博客网 时间:2024/05/17 01:11
   标准JAVA类库分别包含了两个类:一个使用来表示时间的Date类;另一格式用来表示大家所熟悉的日历表示法的GregorianCalendar类。实际上,GregorianCalendar类扩展了一个更加通用的Calendar类,这个类描述了日历的一般属性。(Date类所包含的方法没有GregorianCanlendar类的多,且其方法多不推荐使用,Date类不知道如何操作日历,所以要对日历信息获取与修改需先构造一个GergorianCalendar对象,然后再调用getTime或setTime(),故不做了解)

GregorianCalendar();
构造一个日历对象,用来表示默认地区,默认时区的当前时间。

**GregorianCalendar(int year , int morth, int day)
GregorianCalendar(int year , int morth, int day, int hour, int minutes, int seconds)**
用给定的日期和时间构造一个Gregorian日历对象

主要的方法:
int get(int field)
返回给定的值

void set(int field, int value)
设置特定域的值
field 为想要改变的属性
value 为新值

void set(int year, int month, int day)
void set(int year, int month,int day, int hour, int minutes, int seconds)
将日期域和时间域设置为新值

void add(int field, int amount)
这是一个可以对日期信息实施算术运算的方法。对给定的时间域增加指定数量的时间。
例如:c.add(Calendar.DAY_OF_MONTH,7),将当前的日历日期加上7.

field : 需要修改的域
amount : 域被改变的数量(可以为负值)

int getFirstDayOfWeek()
获取当前用户所在地区,一个星期中的一天

void setTime(Date time)
将日历设置为指定的时间点

Date getTime()
获得这个日历对象当前值所表达的时间点。

String[] getShortWeekdays()
String[] getShortMonths()
String[] getWeekdays()
String[] getMonths()
获得当前地区的星期几或月份的名称。利用Calendar的星期和月份常量作为数组索引值。

//显示当前月的日历package cn.xiaomi;import java.text.DateFormatSymbols;import java.util.*;public class CalendarTest {    public static void main(String[] args) {        // TODO Auto-generated method stub        //construct d as current date        //创建当前时间对象        GregorianCalendar d = new GregorianCalendar();        //获取当前月份与日期        int today = d.get(Calendar.DAY_OF_MONTH);        int month = d.get(Calendar.MONTH);        //SET d to start date of the month        d.set(Calendar.DAY_OF_MONTH,1);        //获取当前月1号的星期为后面该留出多少位置做准备(例如日历的星期从星期日开始,而当前月的1号为星期三则应留出三个位置)        int weekday = d.get(Calendar.DAY_OF_WEEK);        //get first day of week (Sunday in the U.S.)        //getFirstDayOfWeek()方法获取当前地区星期的起始日        int firstDayOfWeek = d.getFirstDayOfWeek();        //determine the required indentation for the first line         int indent = 0;        while(weekday != firstDayOfWeek){            indent++;            //当前月的日期减1(假如现在是5月,即5.1星期三,减一为4.28星期二,经过不断循环,当日期减至4.26星期日时为最后一次跳出循环)            d.add(Calendar.DAY_OF_MONTH, -1);            weekday = d.get(Calendar.DAY_OF_WEEK);        }        //print all weekday names(有序的输出从星期日至星期六简写)        String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();        do{            System.out.printf("%4s",weekdayNames[weekday]);            d.add(Calendar.DAY_OF_MONTH,1);            weekday = d.get(Calendar.DAY_OF_WEEK);        }while(weekday != firstDayOfWeek);        System.out.println();        for(int i = 1; i <= indent; i++)            System.out.print("  ");        d.set(Calendar.DAY_OF_MONTH,1);        do{            //print day            int day = d.get(Calendar.DAY_OF_MONTH);            System.out.printf("%3d",day);            //mark current day with *            if(day == today)                System.out.print("*");            else                System.out.print(" ");            //advance d to the nextday            d.add(Calendar.DAY_OF_MONTH, 1);            weekday = d.get(Calendar.DAY_OF_WEEK);            //start a new line at the start of the week            if(weekday == firstDayOfWeek)                System.out.println();           }        while (d.get(Calendar.MONTH) == month);        //the loop exist when d is day 1 of the next month        //print final end of line if necessary        if(weekday != firstDayOfWeek)            System.out.println();    }}![运行结果:](http://img.blog.csdn.net/20160823171050210)
 日历果然要用列表才可以做得更好。
0 0
原创粉丝点击