calendar java 线程安全
calendar java 线程安全
基本:
Calendar calendar =Calendar.getInstance();int year = calendar.get(Calendar.YEAR); //得到当前时间的年份
int month = calendar.get(Calendar.MONTH) + 1;//获取当前时间的月,这里需要需要月份的范围为0~11,因此获取月份的时候需要+1才是当前月份值
int date = calendar.get(Calendar.DATE); //获取当前多少号(日期)
int day = calendar.get(Calendar.DAY_OF_MONTH);//获取日(好像和上面那个没有什么区别)
int hour = calendar.get(Calendar.HOUR); //获取小时,十二小时制
int hour02 = calendar.get(Calendar.HOUR_OF_DAY);//获取小时,二十四小时制
int minute = calendar.get(Calendar.MINUTE);//获取分
int second = calendar.get(Calendar.SECOND);//获取秒
int weekday = calendar.get(Calendar.DAY_OF_WEEK);//星期,英语国家星期从星期日开始计算
获得当天23时59分59秒,输出:2018-03-22 23:59:59
public static Date getDate(int hour, int minute, intsecond) {
Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour); // 设置小时,如果没有,则默认当前时间小时
calendar.set(Calendar.MINUTE, minute); // 设置分钟,如果没有,则默认当前时间分钟
calendar.set(Calendar.SECOND, second); // 设置秒数,如果没有,则默认当前时间秒数
calendar.set(Calendar.MILLISECOND,0);returncalendar.getTime(); // 所以说,如果没有上面的set,输出的就是当前默认的时间毫秒数
}public static voidmain(String[] args) {
Date date= SocialAccountUtils.getDate(23, 59, 59);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date));
}
年月日的增减;这里要极度注意:因为月份是从0开始,所以输出为:2010-11-10
public static voidmain(String[] args) {
Calendar instance=Calendar.getInstance();
instance.set(2010, 10, 10); //因为月份是从0开始的,所以只是表示11月
Date time =instance.getTime();
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(time));
instance.add(Calendar.YEAR,1); //增加一年,负数表示减少一年
instance.add(Calendar.MONTH, 1);
instance.add(Calendar.DATE,1);
Date time2=instance.getTime();
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(time2));
}
实际应用中,加一个月,减一个月,就可以这样弄了(instance.getTime 以及 setTime方法的应用就在于此):
public static voidmain(String[] args) {try{
Calendar instance= Calendar.getInstance(); //取得实例
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM");
Date parse= sdf2.parse("2015-12"); //获得date类型数据之后
instance.setTime(parse); //instance.setTime的方法用途
instance.add(Calendar.MONTH, 1); //加一个月
System.out.println(sdf2.format(instance.getTime())); //然后再通过instance.getTime再获得date类型数据类型
} catch(Exception e) {
e.printStackTrace();
}
}
关于SimpleDateFormat的一些事一些情,注意默认的东东(说白了就是取最小):
public static void main(String[] args) throwsException {
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy");
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM");
SimpleDateFormat sdf3=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf6=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf6.parse("2015-12-01 00:00:00").getTime() == sdf3.parse("2015-12-01").getTime()); //true
System.out.println(sdf6.parse("2015-12-01 00:00:00").getTime() == sdf2.parse("2015-12").getTime()); //true
System.out.println(sdf6.parse("2015-01-01 00:00:00").getTime() == sdf1.parse("2015").getTime()); //true
}
计算相差的天数(同理,小时数等也是这样计算,但是好像月数年数不能这样,因为一个月以及一年所拥有的天数是不一样的):
public static void main(String[] args) throwsException {
SimpleDateFormat sdf3= new SimpleDateFormat("yyyy-MM-dd");long time1 = sdf3.parse("2015-09-09").getTime();long time2 = sdf3.parse("2016-09-09").getTime();long dayDiff = (time2 - time1) / (24 * 3600 * 1000);
System.out.println(dayDiff);//打印出366
}
获得2017年2月的最后一天:
public static void main(String[] args) throwsException {
SimpleDateFormat sdf3= new SimpleDateFormat("yyyy-MM-dd");
Calendar instance=Calendar.getInstance();
System.out.println(sdf3.format(instance.getTime()));//如果instance什么都没有set,则是默认当前时间
instance.set(Calendar.YEAR, 2017);
instance.set(Calendar.MONTH,2); // 记住这里是2,而不是3,因为月是从0开始的,0到11
instance.set(Calendar.DATE,1);
System.out.println(sdf3.format(instance.getTime()));//2017年3月的第一天,如果哪一个没有设置,则默认当前 2017-03-01
instance.add(Calendar.DATE, -1); //然后减一天
System.out.println(sdf3.format(instance.getTime())); // 2017-02-28
}
afaf
afaf