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
代码:
//创建格式化标准
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
代码:
//创建格式化标准
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
代码:
//创建日期
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
代码:
//计算时差,获取微妙后相减然后换算成时间
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天
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;