1 Date类
类 Date 表示特定的瞬间,精确到毫秒。
1秒=1000毫秒
毫秒的0点:公元1970年 一月一日,午夜0:00:00 对应的毫秒值就是0
时间和日期的计算,必须依赖毫秒值。
System.currentTimeMillis() 返回以毫秒为单位的当前时间。返回值是long类型。
例:
public class Test { public static void main(String[] args) { long times=System.currentTimeMillis(); System.out.println(times); } }
1.1 Date类构造方法
1.1.1 Date()
注意导util下的Date包
例:
import java.util.Date; public class Test { public static void main(String[] args) { //创建当前日期对象 Date date1=new Date(); System.out.println(date1); //创建指定毫秒值的日期对象 Date longdate=new Date(20000000000000L); System.out.println(longdate); } }
1.2常用方法
getTime(),把日期对象转换成对应的时间毫秒值
例:
import java.util.Date; public class Test { public static void main(String[] args) { Date date1=new Date(); System.out.println(date1.getTime()); Date longdate=new Date(20000000000000L); System.out.println(longdate.getTime()); } }
1.3 Date中还有getYear、getMouth等方法,但是已经过时,会有其他类的方法取代。
1.4 toString方法
上面打印date对象就是默认调用了toString方法。
2 DateFormat类
DateFormat 是日期/时间格式化子类的抽象类,
通过这个类可以完成日期和文本之间的转换。
也就是日期对象(new date())和字符串的互相转换。
2.1创建对象
DateFormat是抽象类,需要使用其子类SimpleDateFormat来创建对象。
参数是传一个指定格式,
指定格式的具体规则:
在一个字符串中,会将以下字母替换成对应时间组成部分,剩余内容原样输出:
年月日时分秒:
yyyy-MM-dd HH:mm:ss 注意要写yyyy(四个y),写成yy就是两位数的年份。
2.2常用方法
format方法,将Date对象转换成String
parse方法,将String转换成Date(转换时,该String要符合指定格式,否则不能转换)
例:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Time02 { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //日期对象转成字符串 Date date=new Date(); String datestr=sdf.format(date); System.out.println(datestr); //字符串转成日期对象 String str="1999-05-05 12:05:06"; Date d=sdf.parse(str); System.out.println(d); } }
这里注意要抛异常,因为有可能传一个错误的格式,
3 Calendar类(不常用)
Calendar是日历类,替换掉了许多Date的方法。
该类将所有可能用到的时间信息封装为静态成员变量,方便获取。
Calendar为抽象类,不能直接创建对象,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象。
3.1 Calendar类静态方法
3.2常用方法
例:
import java.util.Calendar; import java.util.Date; public class Demo1 { public static void main(String[] args) { //创建Calendar对象 Calendar c=Calendar.getInstance(); //当前日期 //System.out.println(c); //时间偏移 System.out.println(c.get(Calendar.YEAR)); c.add(Calendar.YEAR, 1); System.out.println(c.get(Calendar.YEAR)); c.add(Calendar.YEAR, -2); System.out.println(c.get(Calendar.YEAR)); c.add(Calendar.DATE, 2); System.out.println(c.get(Calendar.DATE)); //日历类转为日期类 Date d=c.getTime(); System.out.println(d); //将日历类设置成指定的时间 Calendar c2=Calendar.getInstance(); c2.set(Calendar.YEAR, 2008); c2.set(Calendar.MONTH,7); //这是8月 c2.set(Calendar.DATE,8); c2.set(2055, 7, 8, 8, 8, 8); System.out.println(c2.getTime()); } }
注意:
1)用fammat转换,必须先转成日期类
2)西方星期的开始为周日,中国为周一。
3)在Calendar类中,月份的表示是以0-11代表1-12月。
所以月要加1,星期要减1
4)日期是有大小关系的,时间靠后,时间越大。
4 练习
1)求出自己已经出生多少天
import java.util.Calendar; public class Days { public static void main(String[] args) { //当前系统时间毫秒 long currenttime = System.currentTimeMillis(); //设置出生日期 Calendar c = Calendar.getInstance(); c.set(1987, 1, 5); long birth = c.getTime().getTime(); //先转成日期类,再转成毫秒 //计算时间差 int day = (int) ((currenttime - birth) / 1000 / 60 / 60 / 24); System.out.println("已出生" + day + "天"); } }
2)求出今天距离2046年1月1日还有多少天
import java.util.Calendar; public class Days2 { public static void main(String[] args) { // 当前系统时间毫秒 long currenttime = System.currentTimeMillis(); // 设置日期 Calendar c = Calendar.getInstance(); c.set(2046, 1, 1); long future = c.getTime().getTime(); // 先转成日期类,再转成毫秒 // 计算时间差 int day = (int) ((future-currenttime) / 1000 / 60 / 60 / 24); System.out.println("还有" + day + "天到2046年"); } }