以下部分为转:http://blog.sina.com.cn/s/blog_45c06e600100pm77.html
Java中对日期的处理需要用到Calendar类,其中有几个方法在使用时需要新手注意。
1. 在获取月份时,Calendar.MONTH + 1 的原因
Java中的月份遵循了罗马历中的规则:当时一年中的月份数量是不固定的,第一个月是JANUARY。而Java中Calendar.MONTH返回的数值其实是当前月距离第一个月有多少个月份的数值,JANUARY在Java中返回“0”,所以我们需要+1。
2. 在获取星期几 Calendar.DAY_OF_WEEK – 1 的原因
Java中Calendar.DAY_OF_WEEK其实表示:一周中的第几天,所以他会受到 第一天是星期几 的影响。
有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。
看下表的返回值
星期日为一周的第一天 | SUN | MON | TUE | WED | THU | FRI | SAT |
DAY_OF_WEEK返回值 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
星期一为一周的第一天 | MON | TUE | WED | THU | FRI | SAT | SUN |
DAY_OF_WEEK返回值 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
所以Calendar.DAY_OF_WEEK需要根据本地化设置的不同而确定是否需要 “-1”
Java中设置不同地区的输出可以使用 Locale.setDefault(Locale.地区名) 来实现。
3. 获取日期时 Calendar.DAY_OF_MONTH 不需要特殊的操作,他直接返回一个月中的第几天
public static void main(String[] args)
{
Locale.setDefault(Locale.CHINA);
GregorianCalendar now = new GregorianCalendar ( 2013 ,5 , 11 ) ;//6月,月份是从0开始。
int month = now.get ( Calendar.MONTH ) ;
int today = now.get ( Calendar.DAY_OF_MONTH ) ;
now.set( Calendar.DAY_OF_MONTH , 1 ) ;//设置日期为1号
System.out.print(now.toString());
int weekday = now.get( Calendar.DAY_OF_WEEK ) ;//2013.6.1是星期六,一个星期的第七天
System.out.println ( weekday ) ;
int firstweek = now.getFirstDayOfWeek ( );//获取日历开头的星期,一般是星期日
int index = 0 ;
int month1 ;
int day ;
int i ;
while ( weekday != firstweek )
{
index ++ ;
now.add( Calendar.DAY_OF_MONTH , -1 ) ;
weekday = now.get ( Calendar.DAY_OF_WEEK ) ;
}
String [] weekname = new DateFormatSymbols ().getShortWeekdays ( ) ;//获取星期一到星期日的英文或中午简写,注意是数组类型
do {
System.out.printf ( "%4s" , weekname[ weekday ] ) ;
now.add ( Calendar.DAY_OF_MONTH , 1 ) ;
weekday = now.get( Calendar.DAY_OF_WEEK ) ;
}while ( weekday != firstweek ) ;
System.out.println ( ) ;
now.set( Calendar.DAY_OF_MONTH , 1 ) ;
now.set( Calendar.MONTH , month ) ;
for ( i = 1; i <= index ; i ++ )
{
System.out.print ( " ") ;
};
do
{
day=now.get( Calendar.DAY_OF_MONTH ) ;
System.out.printf ( "%3d", day ) ;
if (day == today )
System.out.print ( "*" ) ;
else
System.out.printf ( " " ) ;
now.add( Calendar.DAY_OF_MONTH , 1 ) ;
weekday = now.get ( Calendar.DAY_OF_WEEK ) ;
if ( weekday == firstweek )
System.out.println ( ) ;
month1=now.get( Calendar.MONTH ) ;
}while ( month1==month ) ;
}
}
{
Locale.setDefault(Locale.CHINA);
GregorianCalendar now = new GregorianCalendar ( 2013 ,5 , 11 ) ;//6月,月份是从0开始。
int month = now.get ( Calendar.MONTH ) ;
int today = now.get ( Calendar.DAY_OF_MONTH ) ;
now.set( Calendar.DAY_OF_MONTH , 1 ) ;//设置日期为1号
System.out.print(now.toString());
int weekday = now.get( Calendar.DAY_OF_WEEK ) ;//2013.6.1是星期六,一个星期的第七天
System.out.println ( weekday ) ;
int firstweek = now.getFirstDayOfWeek ( );//获取日历开头的星期,一般是星期日
int index = 0 ;
int month1 ;
int day ;
int i ;
while ( weekday != firstweek )
{
index ++ ;
now.add( Calendar.DAY_OF_MONTH , -1 ) ;
weekday = now.get ( Calendar.DAY_OF_WEEK ) ;
}
String [] weekname = new DateFormatSymbols ().getShortWeekdays ( ) ;//获取星期一到星期日的英文或中午简写,注意是数组类型
do {
System.out.printf ( "%4s" , weekname[ weekday ] ) ;
now.add ( Calendar.DAY_OF_MONTH , 1 ) ;
weekday = now.get( Calendar.DAY_OF_WEEK ) ;
}while ( weekday != firstweek ) ;
System.out.println ( ) ;
now.set( Calendar.DAY_OF_MONTH , 1 ) ;
now.set( Calendar.MONTH , month ) ;
for ( i = 1; i <= index ; i ++ )
{
System.out.print ( " ") ;
};
do
{
day=now.get( Calendar.DAY_OF_MONTH ) ;
System.out.printf ( "%3d", day ) ;
if (day == today )
System.out.print ( "*" ) ;
else
System.out.printf ( " " ) ;
now.add( Calendar.DAY_OF_MONTH , 1 ) ;
weekday = now.get ( Calendar.DAY_OF_WEEK ) ;
if ( weekday == firstweek )
System.out.println ( ) ;
month1=now.get( Calendar.MONTH ) ;
}while ( month1==month ) ;
}
}