date类
在java.util和java.sql包下都有Date类,在这里我们学习的是java.util.Date
Date代表了一个特定的时间,精确到毫秒
构造方法
| 方法名 |
说明 |
| Date() |
分配一个Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒 |
| Date(long date) |
分配一个Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数 |
1 2 3 4 5 6 7 8 9 10
| public class Test { public static void main(String[] args) { Date date = new Date(); System.out.println(date);
long datel = 1000*60*60; Date date2 = new Date(datel); System.out.println(date2); } }
|
Date类常用方法
| 方法名 |
说明 |
| long getTime() |
获取的是日期对象从1970年1月1日到现在的毫秒值 |
| void setTime(long time) |
设置时间,参数为毫秒值 |
1 2 3 4 5 6 7 8 9
| public class Test { public static void main(String[] args) { Date date = new Date(); System.out.println(date.getTime());
date.setTime(1000*60*60); System.out.println(date); } }
|
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化解析和日期。我们重点学习日期的格式化和解析
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从’A’到’Z’以及从’a’到’z’引号的字母被解释为表示日期或时间字符串的组件的模式字母
format英文释义:格式化
注:其实SimpleDateForma类实例化的对象,基本上是存了一个模式,例XXXX年XX月XX日 xx:xx:xx这种的格式。调用方法传参(Date对象或String对象进去)就可以实现以SimpleDateForma模式为格式的转换(格式化和解析)
常用的模式字母及对应关系如下
| 模式字母 |
对应关系 |
| y |
年 |
| M |
月 |
| d |
日 |
| H |
时 |
| m |
分 |
| s |
秒 |
构造方法
| 方法名 |
说明 |
| SimpleDateFormat() |
构造一个SimpleDateFormat,使用默认模式和日期格式 |
| SimpleDateFormat(String patten) |
构造一个SimpleDateFormat,使用给定的模式和默认的日期格式 |
格式化(从Date到String)
final String format(Date date):将日期格式化成日期、时间字符串
1 2 3 4 5 6 7 8 9 10 11 12
| +import java.text.SimpleDateFormat; import java.util.Date;
public class Test { public static void main(String[] args) { Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); String s = sdf.format(d); System.out.println(s); } }
|
解析(从String到Date)
Date parse(String source):从给定的字符串开始解析文本以生成日期
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;
public class Test2 { public static void main(String[] args) throws ParseException { String s = "2001-06-16 10:00:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); date = sdf.parse(s); System.out.println(date); } }
|
Calendar类
Calendar本事是一个抽象类,他本身不能利用构造方法实例化对象
Calendar提供了一个静态方法getInstance用来获取Calendar子类对象,其日历字段已使用当前日期和时间初始化,这个方法在调用实例化对象时实现的本质是多态
instance英文释义:实例
1
| Calendar c = Calendar.getInstance();
|
Calendar常用方法
Calender的方法主要是通过get、set、add对对象里的属性进行修改和读取。
| 方法名 |
说明 |
| int get(int field) |
返回给定日历字段的值 |
| abstarct void add(int field,int amount) |
根据日历的规则,将指定的时间量添加或减去给定的日历属性 |
| final void set(int year,int mounth,int date) |
设置当前的年月日 |
get方法
1 2 3 4 5 6 7 8 9 10 11
| public class Test { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH)+ 1; int date = cal.get(Calendar.DATE); System.out.println(year +"年" + month + "月" + date+ "日"); } }
|
ADD方法
虽然这个方法是抽象方法,但是我们在实例化对象的时候也是用了多态,所以方法在子类中肯定是会重写
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class Test { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.YEAR,10); cal.add(Calendar.DATE,-5); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH)+ 1; int date = cal.get(Calendar.DATE); System.out.println(year +"年" + month + "月" + date+ "日"); } }
|
set方法
1 2 3 4 5 6 7 8 9 10 11
| public class Test { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(2001,05,16); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH)+ 1; int date = cal.get(Calendar.DATE); System.out.println(year +"年" + month + "月" + date+ "日"); }
|
案例
输入一个年份,求这个年的2月有多少天
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入年份"); int year = scanner.nextInt();
Calendar cal = Calendar.getInstance(); cal.set(year,2,1);
cal.add(Calendar.DATE,-1);
System.out.println(cal.get(Calendar.DATE)); } }
|