Data类
java.util.Date类:表示特定的瞬间,精确到毫秒。1000毫秒等于1秒。
Date类构造方法:
- public Date():从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
- public Date(long date):将指定参数的毫秒值date,转换成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
public static void main(String[] args){
//创建日期对象,把当前的时间
System.out.println(newDate());
//Tue Jan 16 14:37:35 CST 2020
//创建日期对象,把当前的毫秒值转成日期对象
System.out.println(newDate(0));
//Thu Jan 01 08:00:00 CST 1970
}
Date类的常用方法
- public long getTime():把日期对象转换成对应的时间毫秒值。
- public void setTime(long time):把方法参数给定的毫秒值设置给日期对象。
public static void main(String[] args){
//创建日期对象
Date date=new Date();
//public long getTime()获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值
System.out.println(date.getTime());
//public void setTime(long time):设置时间,给的是毫秒值
date.setTime(0);
System.out.println(date);
}
日期对象和毫秒值的相互转换
日期是不能进行数学计算的,但是毫秒值可以,在需要对日期进行计算时,可以现将日期转成毫秒值后在进行计算。
- 日期对象转成毫秒值:
- Date date=new Date(); date.getTime()
- System.currentTimeMillis()
-
毫秒值转成日期对象:
-
Date date=new Date(long 毫秒值 )
-
date.setTime(long 毫秒值 )
-
DateFormat类
java.text.DateFormat是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
- 格式化:按照指定的格式,把Date对象转换为String对象。
- 解析:按照指定的格式,把String对象转换为Date对象。
构造方法
由于
DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数Pattern是一个字符串,代表日期时间的自定义格式。常用的格式有:
标识字母(区分大小写)) | 含义 |
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
备注:更详细的格式规则,可以参考
SimpleDateFormat
类的
API
文档。
转换方法
- String format(Date date)传递日期对象,返回格式化后的字符串。
- Date parse(String str)传递字符串,返回日期对象。
public static void main(String[] args) throws ParseException{
//格式化:从Date到String
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
String s=sdf.format(d);
System.out.println(s);
System.out.println("--------");
//从String到Date
String ss="2048-08-0911:11:11";
//ParseException
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
Date dd=sdf2.parse(ss);
System.out.println(dd);
}
Calendar日历类
java.util.Calender是日历类,在Date后出现,替换掉了许多Date的方。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
日历对象获取方式:
Calendar
是抽象类,不能创建对象,需要使用子类对象。
java.util.GregorianCalendar
类是
Calendar的子类,但是创建日历对象需要根据本地的时区,语言环境来创建,比较困难,
Calendar
类提供了静态方法 getInstance()直接获取子类的对象。
public static Calendar getInstance():使用默认时区和语言环境获得一个日历。
Calendar cal = Calendar.getInstance();
常用方法:
- public intget(intfield):返回给定日历字段的值。
- public void set(intfield,intvalue):将给定的日历字段设置为给定值。
- public abstract void add(intfield,intamount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
- public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
日历字段
Calendar类中提供很多静态成员,直接类名调用,代表给定的日历字段:
字段值 | 含义 |
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周日为1,可以-1使用) |
public static void main(String[] args){
//创建Calendar对象
Calendar cal=Calendar.getInstance();
//获取年
int year=cal.get(Calendar.YEAR);
//设置年份为2020年
cal.set(Calendar.YEAR,2020);
//将年份修改为2000年
cal.add(Calendar.YEAR,-20)
//将日历对象转换为日期对象
Date d=cal.getTime();
System.out.println(d);
}
案例需求:获取任意一年中的二月有几天
案例分析:
- 可以将日历设置到任意一年的三月一日
- 向前偏移一天
- 获取偏移后的日历即可
代码实现:
public static void main(String[] args){
//键盘录入任意的年份
Scanner sc=new Scanner(System.in);
System.out.println("请输入年:");
int year=sc.nextInt();
//设置日历对象的年、月、日
Calendar c=Calendar.getInstance();
c.set(year,3,1);
//3月1日往前推一天,就是2月的最后一天
c.add(Calendar.DATE,-1);
//获取这一天输出即可
int date=c.get(Calendar.DATE);
System.out.println(year+"年的2月份有"+date+"天");
}