您的位置:首页 > 其它

日期类Calendar遇到的问题总结

2017-07-06 12:30 92 查看

1.获取月份时候,Calendar.MONTH需要+1

Calendar.MONTH
返回的是当前月距离第一个月的差值,而
Java
中第一个月
JANUARY
是0,所以需要+1

代码:

//创建日期
Date date = new Date();

//显示现在时间
String time = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSSS")).format(date);
System.out.println("现在时间: " + time);

//创建Calendar对象并设置现在时间
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

System.out.println("1月份返回的是: " + Calendar.JANUARY);
System.out.println("返回的月份是: " + calendar.get(Calendar.MONTH));
System.out.println("实际的月份是: " + (calendar.get(Calendar.MONTH) + 1));


结果:

现在时间: 2017-07-06 11:23:19:0954
1月份返回的是: 0
返回的月份是: 6
实际的月份是: 7


2.给Calendar设置固定的时间

2.1.先给Date设置固定时间,再间接给Calendar设置

代码:

//创建格式化标准
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try {
//设置固定时间,parse返回date类型
Date date = simpleDateFormat.parse("2017-7-6 11:28:33");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//按照固定格式显示设置的时间
String time = simpleDateFormat.format(calendar.getTime());
System.out.println(time);
} catch (ParseException e) {
e.printStackTrace();
}


结果:

2017-07-06 11:28:33


2.2.直接设置年月日时分秒

代码:

//创建格式化标准
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.set(2017, 7 - 1, 6, 11, 28, 33);//注意月份要-1,否则结果会大一个月
//按照固定格式显示设置的时间
String time = simpleDateFormat.format(calendar.getTime());
System.out.println(time);


结果:

2017-07-06 11:28:33


3.获取Calendar的时间参数

3.1.时间参数获取

代码:

//创建日期
Date date = new Date();

//显示现在时间
String time = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSSS")).format(date);
System.out.println("现在时间: " + time);

//创建Calendar对象并设置现在时间
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

System.out.println("年: " + calendar.get(Calendar.YEAR));
System.out.println("月: " + (calendar.get(Calendar.MONTH) + 1));

System.out.println("本年第几天: " + calendar.get(Calendar.DAY_OF_YEAR));
System.out.println("本月第几天: " + calendar.get(Calendar.DAY_OF_MONTH));//日

calendar.add(Calendar.HOUR_OF_DAY, 1);
System.out.println("1个小时以后: " + calendar.get(Calendar.HOUR));

calendar.add(Calendar.MONTH, -3);
System.out.println("3个月之前: " + (calendar.get(Calendar.MONTH) + 1));

//特别注意本周几的获取
System.out.println("周几: " + calendar.get(Calendar.DAY_OF_WEEK));

//计算时差,获取微妙后相减然后换算成时间
Calendar time1 = Calendar.getInstance();
time1.set(2017, 9, 10, 11, 22, 33);
Calendar time2 = Calendar.getInstance();
time2.set(2018, 4, 30, 21, 5, 53);

long val = time2.getTimeInMillis() - time1.getTimeInMillis();
long day = val / (1000 * 60 * 60 * 24);
System.out.println("相差: " + day + "天");


结果:

现在时间: 2017-07-06 12:05:09:0160
年: 2017
月: 7
本年第几天: 187
本月第几天: 6
1个小时以后: 1
3个月之前: 4


3.2.时间差

代码:

//计算时差,获取微妙后相减然后换算成时间
Calendar time1 = Calendar.getInstance();
time1.set(2017, 9, 10, 11, 22, 33);
Calendar time2 = Calendar.getInstance();
time2.set(2018, 4, 30, 21, 5, 53);

long val = time2.getTimeInMillis() - time1.getTimeInMillis();
long day = val / (1000 * 60 * 60 * 24);
System.out.println("相差: " + day + "天");


结果:

相差: 232天


3.3.要注意本周几的获取需要-1

System.out.println("周几: " + calendar.get(Calendar.DAY_OF_WEEK));


因为国外和中国的习惯不同,有的是以周一为第一天,有些地区是以周日为第一天,所以可能会在意Calendar里的方法
setFirstDayOfWeek


代码:

System.out.println("周几: " + calendar.get(Calendar.DAY_OF_WEEK));calendar.setFirstDayOfWeek(Calendar.MONDAY);
System.out.println("周几: " + calendar.get(Calendar.DAY_OF_WEEK));


结果:

周几: 5
周几: 5


结果还是没有任何变化,查资料得知这个方法影响的不是本周第几天得到的周几,
setFirstDayOfWeek
的方法只对
WEEK_OF_MONTH
WEEK_OF_YEAR
有作用,当需要这两个参数的时候还是需要根据当地的习惯设置
setFirstDayOfWeek
,或者直接用设置区域。

Locale.setDefault(Locale.CHINA);


calendar.get(Calendar.DAY_OF_WEEK)
返回的其实就只是个常量,按照
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
的顺序,返回5表示的就是周四,所以可以通过代码转换一下。

代码:

int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
if (dayOfWeek == 0)
dayOfWeek = 7;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: