如果有机会,请尝试Java8中全新的时间日期API!(参见Java8新特性随笔)
如果还是使用Java7及之前的版本,那么你可以尝试一些工具类(参考使用工具类相关的Hutool-DateUtil)
如果又不能升级JDK,又无法引入第三方依赖库,那么你可以需要了解以下的时间日期相关的API(无奈之举)
一、常用日期类
二、System类
我们比较常用的时间相关的方法:
我们这里特别注意一下它的定义:返回的是与1970.1.1的时间差(单位:毫秒),由这个定义我们也容易知道它一般不单独使用(意义不大),
最常见的用途就是:计算时间差:
public static void main(String[] args) { long start = System.currentTimeMillis(); for (int i = 0; i<100; i++) { if (i % 2 == 0) { System.out.println("左青龙"); } else { System.out.println("右白虎"); } } long end = System.currentTimeMillis(); System.out.println("用时(ms):"+ (end - start)); }
三、Date类
1.构造方法(过时方法不再赘述)
实例化Date:(已重写toString())
public static void main(String[] args) { // 通过构造器构建Date实例 Date date1 = new Date(); System.out.println(date1);// Thu Sep 14 20:32:16 CST 2017 }
//使用long型有参构造请带上后缀L(new Date(13807966980L))
2.常用方法(可以看到API中很多方法都已经过时)
getTime()——返回对应的毫秒数
public static void main(String[] args) { // 通过构造器构建Date实例 Date date1 = new Date(); System.out.println(date1.getTime());// 1505392872857 }
四、SimpleDateFormat
由于Date类不利于国际化,已经由java.text包(实际上与格式化和解析的类基本都在此包下)下的SimpleDateFormat替代,
作为一个与语言环境有关的方式来格式化和解析日期的具体类
1.构造方法:
也可以解析例如Sep等的英文缩写月份!
2.常用方法:(用于解析与格式化)
format(Date date)——格式化,将日期格式化为字符串
pattern格式详解可以参见API(常用:yyyy-MM-dd HH:mm:ss)
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 格式化 String s = sdf.format(new Date()); System.out.println(s);// 2017-09-14 }
parse(String str)——解析,将字符串解析为日期
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 解析 try { Date date = sdf.parse("2008-8-8"); System.out.println(date);// Fri Aug 08 00:00:00 CST 2008 } catch (ParseException e) { e.printStackTrace(); } }
五、Calendar
主要用于完成字段之间的相互操作的一个抽象基类
1.构造方法(由于是抽象类,无法直接new)
2.常用方法
get(int field)——获取字段的方法
其中涉及的属性可以参见API的属性列表,其中的注意点:
MONTH月份从0开始,也就是1-12月对应 0-11,在Calender中有常量,如Calender.MAY等常量来表示!
DAY_OF_WEEK从1开始,也就是周日到周六对应 1-7
实例:
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c; // 解析 try { Date date = sdf.parse("2017-9-14 21:42:18"); // 使用Date作为参数初始化日历类 c = Calendar.getInstance(); c.setTime(date); // 验证日历设置的时间是否生效 String s = sdf.format(c.getTime()); System.out.println(s); /*通过日历对日期进行字段的操作,获取年月日,操作年月日等*/ // 显示年份 int year = c.get(Calendar.YEAR); System.out.println("年份:"+year); // 显示月份(从0开始) int month = c.get(Calendar.MONTH); System.out.println("月份:"+month); // 周几(从周日(对应1)开始) int weekDay = c.get(Calendar.DAY_OF_WEEK); System.out.println("周几:"+weekDay); // 本月第N天 int day = c.get(Calendar.DAY_OF_MONTH); System.out.println("本月第几天:"+day); /*利用日历操作日期*/ // 2小时后 c.add(Calendar.HOUR_OF_DAY, 2); int hour = c.get(Calendar.HOUR_OF_DAY); System.out.println("2小时后:"+hour); // 15分钟前 c.add(Calendar.MINUTE, -15); int min = c.get(Calendar.MINUTE); System.out.println("15分钟前:"+min); // 重置为当前时间 c.setTime(new Date()); Date now = c.getTime(); String s1 = sdf.format(now); System.out.println("当前时间:"+s1); } catch (ParseException e) { e.printStackTrace(); }
结果: