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);
这里面的大小写需要注意一下,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;
- }