您的位置:首页 > 编程语言 > Java开发

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

2016-09-29 15:08 861 查看
上一篇文章中用到了 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);



可以看出来,第二次打印的时间不再是系统时间了,而是我们设置的时间,通过这样
4000
的方式,可是设置 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐