一、Date类 点击此处返回总目录 二、毫秒值的概念 三、Date类的构造方法 四、Date类的常用方法 五、DateFormat类、SimpleDateFormat类 六、SimpleDateFormat类的常用方法 七、Calendar类 八、日期、日历练习 一、Date类 类 Date 表示特定的瞬间,精确到毫秒。1秒=1000毫秒。 注意:是使用的util包下面的Date,不是sql包下面的Date。 二、毫秒值的概念 System.currentTimeMilis() //方法返回long类型值,获取当前时间的毫秒值。System类在Java中不需要导包。得到的数是从公元 1970年1月1日00:00:00到当前时间过了多少毫秒。 注意:时间和日期的计算必须依赖毫秒值,所以很重要。 例1:获取当前时间的毫秒值
package dateDemo; public class Test { public static void main(String[] args) { long t = System.currentTimeMillis(); System.out.println(t); //1534211981051 } } |
三、Date类的构造方法 1. public Date() //空参构造器。获取到的是当前操作系统中的时间和日期。如果把电脑上的日期改了,那么得到的时间也会相 应改变。【例1】 2. public Date(long date) //有参构造函数。传入的是毫秒值,将毫秒值转化成对应的日期对象。【例2】 例1:
package dateDemo; import java.util.Date; public class Test { public static void main(String[] args) { Date date = new Date(); System.out.println(date); //Tue Aug 14 10:19:14 CST 2018。输出的不是地址,说明 Date类重写过toString()。 //输出意义:周二 8月 14日 china stand time } } |
例2:
package dateDemo; import java.util.Date; public class Test { public static void main(String[] args) { Date date = new Date(0); System.out.println(date); //Thu Jan 01 08:00:00 CST 1970 。有8个小时的时差。 } } |
四、Date类的常用方法 1. public long getTime() //将Date表示的日期转成毫秒值。【例1】 2. public void setTime(long time) //将Date对象的日期切换到毫秒值对应的日期。跟有参构造器效果相同。【例2】 例1:把Date表示的时间转化成毫秒值。
package dateDemo; import java.util.Date; public class Test { public static void main(String[] args) { Date date = new Date(); System.out.println(date); //Tue Aug 14 10:49:01 CST 2018 long t1 = date.getTime(); System.out.println(t1); //1534214941925。把date的时间转化成毫秒值。 long t2=System.currentTimeMillis(); System.out.println(t2); //1534214941947。说明这几句代码运行了22毫秒。 } } |
例2:将Date对象的日期切换到毫秒值对应的日期。
package dateDemo; import java.util.Date; public class Test { public static void main(String[] args) { Date date = new Date(0); System.out.println(date); //Thu Jan 01 08:00:00 CST 1970 long t1 = System.currentTimeMillis(); date.setTime(t1); //将data的日期切换到t1对应的日期。 System.out.println(date); //Tue Aug 14 11:00:06 CST 2018 } } |
五、DateFormat类、SimpleDateFormat类 日期格式化,变成我们想要的格式。在java.text包下面。 java.text.DateFormat类是一个抽象类。里面既有抽象方法,又有非抽象方法。实际中我们需要使用其子类java.text.SimpleDateFormat来创建对象。 六、SimpleDateFormat类的常用方法 1. public final String format(Date date) //将一个 Date 格式化为日期/时间字符串。 2. public Date parse(String source) //将字符串转成日期对象 1. format()方法的使用 如何对日期格式化: 步骤1:创建SimpleDateFormat对象 在类的构造方法中,写入字符串的日期格式(自己定义) 步骤2:SimpleDateFormat调用方法format对日期进行格式化 String format(Date date) 传递对象,返回字符串 日期格式: yyyy 年份 MM 月份 dd 月中的天数 HH 0-23小时 mm 分 ss 秒 例:对日期进行格式化
package dateFormatDemo; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); //步骤1 String date =sdf.format(new Date()); //步骤2 System.out.println(date); //2018年08月14日 14时28分20秒 } } |
2. parse()方法的使用 如何将字符串转化成Date对象: 步骤1:创建SimpleDateFormat对象 构造方法中,指定日期格式 步骤2:对象调用parse(),传递String,返回Date。 例:
package dateFormatDemo; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日,HH时mm分ss秒"); //步骤1 Date date = sdf.parse("2018年08月14日,14时28分20秒"); //步骤2 System.out.println(date); //Tue Aug 14 14:28:20 CST 2018 } } |
七、Calendar类 日历类。Calendar类是抽象类。需要使用他的子类对象。但是,Calendar类写了静态的方法getInstance()直接返回子类的对象。不需要new子类对象,直接通过静态方法获取即可。 1. public static Calendar getInstance() //使用默认时区和语言环境获得一个日历。【例1】 2. public int get(int field) //返回日历字段的值。【例2】 3. public void set(int field, int value) //设置日历字段。field是指哪个日历字段,value是设置的值。【例3】 4. public final void set(int year, int month, int date) //直接传递三个整数。【例3】 5. public abstract void add(int field, int amount) //日历的偏移。给定一个日历中的字段,进行偏移。【例4】 6. public final Date getTime() //日历对象转化成日期对象。【例5】 例1:getInstance()方法的使用
package calendarDemo; import java.util.Calendar; public class Test { public static void main(String[] args) { Calendar c = Calendar.getInstance(); //得到子类的对象。 System.out.println(c); } } |
输为:java.util.GregorianCalendar[time=1534232887107,areFieldsSet=true,areAllFieldsSet=true,lenient=true, zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false, transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=7, WEEK_OF_YEAR=33,WEEK_OF_MONTH=3,DAY_OF_MONTH=14,DAY_OF_YEAR=226,DAY_OF_WEEK=3, DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=48,SECOND=7,MILLISECOND=107, ZONE_OFFSET=28800000,DST_OFFSET=0] 输出结果有一大串,含有很多信息。比如,2018年,今年的第7个月(从0开始数,即8月),今年的第33周,这个月的第3周等。 例2:get()方法的使用
package calendarDemo; import java.util.Calendar; public class Test { public static void main(String[] args) { Calendar c = Calendar.getInstance(); //得到子类的对象。 //获取年份 int year = c.get(Calendar.YEAR); //获取月份 int month = c.get(Calendar.MONTH)+1; //他是0-11月,所以加1. //获取日 int day = c.get(Calendar.DAY_OF_MONTH); System.out.println(year + ":" + month + ":" + day); //2018:8:14 } } |
例3:set()的使用
package calendarDemo2; import java.util.Calendar; public class Test { public static void main(String[] args) { Calendar ca = Calendar.getInstance(); ca.set(Calendar.YEAR, 2022); System.out.println(ca.get(Calendar.YEAR)); //2022 ca.set(2000, 1, 20); //设置成2000年2月20日。 System.out.println(ca.get(Calendar.YEAR)+":"+(ca.get(Calendar.MONTH)+1)+":"+ca.get(Calendar.DAY_OF_MONTH)); //2000:2:20 } } |
例4:日期的偏移
package calendarDemo2; import java.util.Calendar; public class Test { public static void main(String[] args) { Calendar ca = Calendar.getInstance(); System.out.println(ca.get(Calendar.YEAR)); //2018 ca.add(Calendar.YEAR, 3); System.out.println(ca.get(Calendar.YEAR)); //2021 ca.add(Calendar.YEAR, -4); System.out.println(ca.get(Calendar.YEAR)); //2017 } } |
例5:日历对象转化成Date对象
package calendarDemo2; import java.util.Calendar; import java.util.Date; public class Test { public static void main(String[] args) { Calendar ca = Calendar.getInstance(); Date date = ca.getTime(); System.out.println(date); //Tue Aug 14 18:11:24 CST 2018 } } |
八、日期、日历练习 练习1:求自己出生了多少天
package Demo3; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class Test { public static void main(String[] args) throws Exception { System.out.println("请输入出生年与日:(yyyy-MM-dd)"); String birthday = new Scanner(System.in).next(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(birthday); long birth = date.getTime(); long now = System.currentTimeMillis(); int a =(int)((now -birth)/1000/60/60/24); System.out.println(a); } } |
练习2:判断是否为闰年 算法:如果当年2月有29天,说明为润年。否则不是。首先把时间设置到当年3月1日,然后往回走一天,看看是2月份的第几天。
package Demo4; import java.util.Calendar; public class Test { public static void main(String[] args) { int year = 2000; Calendar ca = Calendar.getInstance(); ca.set(year, 2, 1); //3月1日 ca.add(Calendar.DAY_OF_MONTH, -1); System.out.println(ca.get(Calendar.DAY_OF_MONTH)); if(ca.get(Calendar.DAY_OF_MONTH) == 29){ System.out.println("yes"); }else{ System.out.println("no"); } } } |
|