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

posted @ 2017-12-24 00:20  天马行空郭  阅读(1481)  评论(0编辑  收藏  举报