本文目录一览:
- Java中中关于Calendar类的几点注意事项
- Java中日历类(CalendarClass)的用途?
- java 中Calendar.getInstance() 实现的是什么?
- java中的Calendar如何使用?
- java Calendar设置日期
Java中中关于Calendar类的几点注意事项
在使用Java的Calendar类会遇到的几个问题,这里整理一下,供参考
在获取月份时,Calendar.MONTH + 1
的原因
Java中的月份遵循了罗马历中的规则:当时一年中的月份数量是不固定的,第一个月是JANUARY。而Java中Calendar.MONTH
返回的数值其实是当前月距离第一个月有多少个月份的数值,所以月份为JANUARY在Java中返回“0”,依次类推也就是在取Calendar.MONTH
的值时我们需要+1。
2. 在获取星期几 Calendar.DAY_OF_WEEK – 1
的原因
Java中Calendar.DAY_OF_WEEK
其实表示:一周中的第几天,所以他会受到 第一天是星期几 的影响。
有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。
看下表的返回值
所以Calendar.DAY_OF_WEEK
需要根据本地化设置的不同而确定是否需要 “-1”
Java中设置不同地区的输出可以使用 Locale.setDefault(Locale.地区名)
来实现。
3. 获取日期时 Calendar.DAY_OF_MONTH
不需要特殊的操作,他直接返回一个月中的第几天
Java中日历类(CalendarClass)的用途?
Java中日历类(Calendar类)的用途如下:
Calendar类的静态方法getInstance()
可以初始化一个日历对象:
Calendar now = Calendar.getInstance();
可以使用下面三个方法把日历定到任何一个时间:
set(int year, int month, int date);
set(int year, int month, int date, int hour, int minute);
set(int year, int month, int date, int hour, int minute, int second);
如果想获得年份、月份、小时等信息可以使用:
now.get(Calendar.MONTH); // 这样的方法,0表示一月,1表示二月
get(Calendar.DAY_OF_MONTH); // 获得这个月的第几天
get(Calendar.DAY_OF_WEEK); // 获得这个星期的第几天
get(Calendar.DAY_OF_YEAR); // 获得这个年的第几天
getTimeMillis(); // 获得当前时间的毫秒表示
- 计算某一月份的最大天数
Calendar time = Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR, year);
time.set(Calendar.MONTH, i-1); // 注意,Calendar对象默认一月为0
int day = time.getActualMaximum(Calendar.DAY_OF_MONTH); // 本月份的天数
注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间 2. Calendar和Date的转化 (1) Calendar转化为Date
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
(2) Date转化为Calendar
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
- 格式化输出日期时间
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(df.format(date));
- 计算相隔天数的方法
public int getDaysBetween(Calendar d1, Calendar d2) {
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) {
d1 = (Calendar) d1.clone();
do {
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR); // 得到当年的实际天数
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
java 中Calendar.getInstance() 实现的是什么?
java中calendar.getInstance()
和new Date()
的差别如下:
calendar.getInstance()
是获取一个calendar对象并可以进行时间的计算,时区的指定new Date()
是创建了一个date对象,默认是UTC格式的。 二者可以相互转化: 从一个calendar对象中获取date对象:
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
将date对象反应到一个calendar对象中:
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
java中的Calendar如何使用?
package pack.java.calendar.demo;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class CalendarDemo {
private static SimpleDateFormat date_format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
public static void main(String[] args) {
// 获取calendar实例
Calendar calendar = Calendar.getInstance();
// 判断calendar是不是GregorianCalendar类的实例
if(calendar instanceof GregorianCalendar){
System.out.println("属于GregorianCalendar类的实例!");
}
// 从calendar对象中获得date对象,当前时间
Date dates = calendar.getTime();
// 格式化时间
String date_str = date_format.format(dates);
System.out.println(date_str);
// 设置月份05;代表日历的月份6月,因为月份从0开始
calendar.set(Calendar.MONTH, 05);
int months = calendar.get(Calendar.MONTH);
System.out.println(months); // 输出05
// 设置日期为2011-07-24 09:59:50
calendar.set(2011, 06, 24, 9, 59, 50);
String getDate = date_format.format(calendar.getTime());
System.out.println(getDate); // 输出2011-07-24 09:59:50
// 比较日期大小
if(new Date().getTime() > calendar.getTimeInMillis()){
System.out.println("当前日期在后!");
} else {
System.out.println("当前日期在前!");
}
// 设置当前时间为:2011-07-24 11:06:00
calendar.setTime(new Date());
int year = calendar.get(Calendar.YEAR); // 获取年
int month = calendar.get(Calendar.MONTH); // 获取月
int date = calendar.get(Calendar.DATE); // 获取天
int hour = calendar.get(Calendar.HOUR); // 获取小时
int minute = calendar.get(Calendar.MINUTE); // 获取分钟
int second = calendar.get(Calendar.SECOND); // 获取秒钟
int hour_of_day = calendar.get(Calendar.HOUR_OF_DAY); // 第几个小时
int day_of_month = calendar.get(Calendar.DAY_OF_MONTH); // 这天,在一个月内是第几天
int day_of_week = calendar.get(Calendar.DAY_OF_WEEK); // 这天,在一周内,是第几天
int day_of_year = calendar.get(Calendar.DAY_OF_YEAR); // 这天,在一年内,是第几天
int week_of_year = calendar.get(Calendar.WEEK_OF_YEAR); // 这周,在一年内,是第几周
int week_of_month = calendar.get(Calendar.WEEK_OF_MONTH); // 这周,在这个月是第几周;以星期为标准
int zone_offset = calendar.get(Calendar.ZONE_OFFSET); // 获取时区
int day_of_week_in_month = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); // 某月中第几周,按这个月1号算,1号起就是第1周,8号起就是第2周。以月份天数为标准
int r = calendar.get(Calendar.AM_PM);
if(r == calendar.AM){
System.out.println("现在是上午");
}
if(r == calendar.PM){
System.out.println("现在是下午");
}
System.out.println("==================================================");
System.out.println(year);
System.out.println(month);
System.out.println(date);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
System.out.println(hour_of_day);
System.out.println(day_of_month);
System.out.println(day_of_week);
System.out.println(day_of_year);
System.out.println(week_of_year);
System.out.println(week_of_month);
System.out.println(zone_offset);
System.out.println(day_of_week_in_month);
}
}
java Calendar设置日期
int m1 = c.get(Calendar.MONTH);
设置的地方,和取出来的地方,都没有考虑+1,所以结果还是7。