日常中最常用的表示时间的类就是java.util.Date类了,实际上Date类还有
- java.sql.Date,
- java.sql.Date类是对java.util.Date类的继承。从包名上也可以看出
- java.sql.Date类是处理SQL时使用的类
- 。
通过查看java.sql.Date类,可以看到其主要的方法及接口均继承自java.util.Date类,例如以下创建方法
public Date(long date) { // If the millisecond date value contains time info, mask it out. super(date); }
它自己实现的接口主要为valueOf(String)和toString()方法,从这两个方法可以看出java.sql.Date在与字符串与日期转换的时候,只能够支持年/月/日的输入和输出。当然如果是通过其父类的方法进行创建的,例如通过long类型入参进行创建的实例中,仍然包含时间的信息。
对于java.util.Date类实例的操作,常用的可能有三类
1.创建日期实例
创建日期的方法为Date(long date),该方法将date参数传递给实例的一个long类型参数中,也就是说实际上Date类型依然是以数字的方式保持时间信息。再通过其它的接口来将其转化为我们所需要的时间信息。注意这个long参数为transient类型,这导致Date类型实例保存的时间信息无法进行序列化。
为了获取到当前的日期,可以使用Date()方法创建,该方法实际返回为将System.currentTimeMillis()作为参数调用上面提到的Date(long date)方法。
实际上,我们无法从Date实例中的long类型值直接知道当前的时间値,当然也就无法通过long值设置时间。我们常用SimpleDateFormat类来创建Date类型的时间,该类通过某种格式的字符串来创建Date实例
DateFormat formate = new SimpleDateFormat("yyyy-MM-dd"); try { Date newDate = formate.parse("2014-01-12"); System.out.println(formate.format(newDate)); System.out.println(newDate); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); }
输出为:
2014-01-12
Sun Jan 12 00:00:00 CST 2014
实际上也可通过Calendar类来设置时间
SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2000); cal.set(Calendar.MONTH, 3); cal.set(Calendar.DATE, 29); cal.set(Calendar.HOUR, 10); cal.set(Calendar.MINUTE, 12); cal.set(Calendar.SECOND, 15); Date date = cal.getTime(); System.out.println(formate.format(date));
这里需要注意的是,设置月份是,是从0开始的,也就是说当传递0时,表示为1月,依次类推。输出为
2000-04-29 10:12:15
2.设置和获取具体的时间值,例如年月日等信息
java.util.Date类中的日期获取方法例如getYear()和setYear(int)等,均为@Deprecated,即已被舍弃,实际上如果通过main函数直接调用并将这些方法的结果输出,也可能无法直接得到我们希望的结果。
例如在上述代码中加入System.out.println(newDate.getYear());语句,其输出为:114
实际上,调用setYear(int)时,有一个“+ 1900”的计算,getYear()则有一个“- 1900”这导致如果在设置时间值时,需要进行修正,例如需要设置年份为2000--03-03时有:
SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = new Date(); date.setYear(100); date.setMonth(3); date.setDate(3); System.out.println(formate.format(date)); System.out.println(date.getYear());
此时输出值为:
2000-04-03 01:44:04 100
3.进行时间的推算
可通过计算直接对Date类型实例进行计算,例如需要推算出当前时间一个小时后的时间时,有
SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date nowDate = new Date(); Date newDate = new Date(nowDate.getTime()+1*24*60*60*1000); System.out.println(" now:"+formate.format(nowDate)); System.out.println("one day later:"+formate.format(newDate));
输出可能为
now:2014-02-26 01:12:18
one day later:2014-02-27 01:12:18
在实际上使用中,用于时间的计算,更多的是java.util.Calendar,例如
SimpleDateFormat formate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date nowDate = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(nowDate); cal.add(Calendar.DATE, 1); Date newDate = cal.getTime(); System.out.println(" now:"+formate.format(nowDate)); System.out.println("one day later:"+formate.format(newDate));
输出结果与上面的例子是一样的。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步