Java中Calendar类的简单使用方法,以及日期格式化的方法,字符串日期格式的验证

 Calendar 类的使用方法:

  1. public static void main(String[] args) {  
  2.     Calendar calendar = Calendar.getInstance();  
  3.     int year = calendar.get(Calendar.YEAR);  
  4.     int month = calendar.get(Calendar.MONTH) + 1;  
  5.     int day = calendar.get(Calendar.DAY_OF_MONTH);  
  6.     int hour = calendar.get(Calendar.HOUR_OF_DAY);  
  7.     int minute = calendar.get(Calendar.MINUTE);  
  8.     int second = calendar.get(Calendar.SECOND);  
  9.     System.out.println(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second);  
  10.       
  11.     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);  
  12.     System.out.println(format.format(calendar.getTime()));  
  13. }  
再看一下运行结果:


这里通过 getInstance() 创建 Calendar 对象,获取当前系统的时间。

第一段代码分别获取 Calendar 中的年月日时分秒,然后打印在控制台,这里要注明的是 Calendar 的月是从0开始的,一年12个月分

是0~11,所以上面对月份进行了 +1 操作。

第二段代码则是直接获取 Calendar 的时间,然后通过格式化后打印在控制台。

从结果我们可以看出一些不一样的地方,格式化的时间与我们单独获取拼接的时间,其中的0~9的显示方式不同,单独获取的是 int 

类型,0~9只是显示成0~9,而格式化的值则显示为00~09。所以这里要强调一个问题,当我们在对这些值进行比较时,尤其是用到

字符串的 equals() 方法时,0和00并不相等,博主在之前没注意就在这个问题上卡了一会。


我们在之前两段代码的中间再加上以下代码来看看运行结果:

  1. calendar.set(Calendar.YEAR, 2016);  
  2. calendar.set(Calendar.MONTH, 1-1);  
  3. calendar.set(Calendar.DAY_OF_MONTH, 1);  
  4. calendar.set(Calendar.HOUR_OF_DAY, 6);  
  5. calendar.set(Calendar.MINUTE, 15);  
  6. calendar.set(Calendar.SECOND, 30);  

可以看出来,第二次打印的时间不再是系统时间了,而是我们设置的时间,通过这样的方式,可是设置 Calendar 为我们想要的时

间,这里还要提一下的是在设置“小时”时,有两个方式,分别为 Calendar.HOUR_OF_DAY 和 Calendar.HOUR ,这两个得区别是前

是24h制,后者是12h制。

Calendar 类还有很多运用方法,这里不再做详细阐述,感兴趣的朋友可以去查看 JDK 文档下的 Java.util.Calendar 类的说明,没有比

这里再全的资料了。


上文中还用到了一个 SimpleDateFormat 类,这个类就是用来格式化的。

先看一段运用代码及结果:

  1. public static void main(String[] args) {  
  2.     // 日期转字符串  
  3.     Calendar calendar = Calendar.getInstance();  
  4.     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);  
  5.     System.out.println(format.format(calendar.getTime()));  
  6.       
  7.     // 字符串转日期  
  8.     String date = "2016-01-01 01:01:01";  
  9.     try {  
  10.         System.out.println(format.parse(date));  
  11.     } catch (ParseException e) {  
  12.         e.printStackTrace();  
  13.     }  
  14. }  

从结果可以看出,上面两段代码分别将 Date 转为 String 和 String 转为 Date。

其中的关键是

  1. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);  
第一个参数确定了转换格式,yyyy是完整的公元年,MM是月份,dd是日期,HH是小时,mm是分钟,ss是秒。

这里面的大小写需要注意一下,MM为月份,mm为分钟,HH是24h制,hh是12h小时制,其余的小写就可。

这里介绍的只是简单的常用格式,还有更全的格式就不做具体说明了,依旧可以去查阅 JDK 文档了解。


最后再附上一段代码,用于验证字符串是否是一个合法的日期格式:

  1. /** 
  2.  * 验证字符串是否是一个合法的日期格式 
  3.  * @param date      日期字符串 
  4.  * @param template  要匹配的日期格式 
  5.  * @return          返回验证结果,boolean值 
  6.  */  
  7. private boolean isValidDate(String date, String template) {  
  8.     boolean convertSuccess = true;  
  9.     // 指定日期格式  
  10.     SimpleDateFormat format = new SimpleDateFormat(template, Locale.CHINA); // 例如:yyyy-MM-dd HH:mm:ss  
  11.     try {  
  12.         // 设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01  
  13.         format.setLenient(false);  
  14.         format.parse(date);  
  15.     } catch (Exception e) {  
  16.         // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对  
  17.         convertSuccess = false;  
  18.     }  
  19.     return convertSuccess;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值