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

上一篇文章中用到了 Calendar 类,这里顺便说一下它的简单运用方法。先看一段代码:

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


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

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

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

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

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

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

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


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

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

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

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

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

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

这里再全的资料了。


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

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

	public static void main(String[] args) {
		// 日期转字符串
		Calendar calendar = Calendar.getInstance();
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
		System.out.println(format.format(calendar.getTime()));
		
		// 字符串转日期
		String date = "2016-01-01 01:01:01";
		try {
			System.out.println(format.parse(date));
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

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

其中的关键是

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 文档了解。


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

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


你可能感兴趣的:(Java)