Calendar(线程不安全)
基本:
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, int second) { 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); return calendar.getTime(); // 所以说,如果没有上面的set,输出的就是当前默认的时间毫秒数 } public static void main(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 void main(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 void main(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) throws Exception { 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) throws Exception { 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) throws Exception { 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