9.5 时间和日期
Java关于时间和日期的类,主要有Date和Calendar。Caldendar将逐渐取代Date,Date的大部分方法,已经是depreciate,意思就是不推荐,将来JDK升级后将不可用。Calendar主要有以下的方法:
返回类型 | 函数名及参数 | 说明 | 示例 |
---|---|---|---|
Calendar | getInstance() | 静态方法,生成一个Calendar对象。Calendar没有公开的构造方法 | Calendar c = Calendar.getInstance(); |
int | get(int field) | 根据field取得年月日时分秒的某一个值。field值是Calendar的属性,主要有以下几个: Calendar.YEAR代表年, Calendar.MONTH代表月, Calendar.DATE代表日期, Calendar.HOUR代表小时 Calendar.MINUTE代表分 Calendar.SECOND代表秒 Calendar.MILLISECOND代表毫秒 Calendar.DAY代表星期 | int year = c.get(Calendar.YEAR); System.out.println(year); int month = c.get(Calendar.MONTH); System.out.println(month); int date = c.get(Calendar.DATE); System.out.println(date); int day = c.get(Calendar.DAY_OF_WEEK); System.out.println(day); int hour = c.get(Calendar.HOUR); System.out.println(hour); hour = c.get(Calendar.HOUR_OF_DAY); System.out.println(hour); int minite = c.get(Calendar.MINUTE); System.out.println(minite); int second = c.get(Calendar.SECOND); System.out.println(second); int milisecond=c.get(Calendar.MILLISECOND); System.out.println(milisecond); |
void | set(field, value); | 根据field设置年月日时分秒的某一个值为value | c.set(Calendar.DATE, 29); |
void | set(year, month, date, hourOfDay, minute,second); | 一次设定年月日时分秒 | c.set(2019, 5, 10, 10, 38,20); |
void | set(year, month, date); | 一次设定年月日 | c.set(2019, 5, 10); |
void | add(field, amount); | 根据field增加量,例如31日的日期加上两天,那么月份也会自动增加 | 当前日期往后10天c.add(Calendar.DATE, 10); 当前日期往前5天 c.add(Calendar.DATE, -5); |
long | getTimeInMillis() | 从1970年到当前的毫秒数,这会是一个很大的整数。通常用来做时间戳,因为肯定不会重复。 | long t=c.getTimeInMillis(); |
void | setTime(Date date) | 根据一个Date对象设置Calendar | c.setTime(date); |
Date | getTime() | 生成一个Date对象 | Date d=c.getTime(); |
下面这段代码包含了上面大部分的方法,以下代码需要import语句,Date和Calendar都是java.util里的包,特别注意,java.sql里面也有一个Date类,不要搞错了
import java.util.Calendar;
import java.util.Date;
public class Test{
public static void main(String args[]){
Calendar c=Calendar.getInstance();
Date d=new Date(c.getTimeInMillis());
System.out.println(d);
//取得当前的年份
int year=c.get(Calendar.YEAR);
System.out.println(year);
//取得当前的月份
int month=c.get(Calendar.MONTH);
System.out.println(month);
//取得当前的日期
int date=c.get(Calendar.DATE);
System.out.println(date);
//取得当前的星期
int day=c.get(Calendar.DAY_OF_WEEK);
System.out.println(day);
//取得当前的小时
int hour=c.get(Calendar.HOUR);
System.out.println(hour);
//取得当前的小时,24小时
hour=c.get(Calendar.HOUR_OF_DAY);
System.out.println(hour);
//取得当前的分钟
int minite=c.get(Calendar.MINUTE);
System.out.println(minite);
//取得当前的秒
int second=c.get(Calendar.SECOND);
System.out.println(second);
//取得当前的毫秒
int milisecond=c.get(Calendar.MILLISECOND);
System.out.println(milisecond);
//当前日期时间下加10天,自动增加月份、年份
c.add(Calendar.DATE,10);
System.out.println(c.getTime());
//当前日期时间下减5天,自动减少月份、年份
c.add(Calendar.DATE,-5);
System.out.println(c.getTime());
}
}
我们可以通过Calendar类取得当前的所有时间因子,如果要按某个格式打印出来的话,恐怕比较难统一,例如中国人喜欢年月日的格式,有的国家用日月年,或者月日年这样的格式,为了方便打印日期,专门有一个类来处理。它就是SimpleDateFormat,这个类位于java.text包内,例如看下面的代码:
public static void main(String args[]){ java.text.SimpleDateFormat dateFormat=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); String time=dateFormat.format(new java.util.Date()); System.out.println(time);}
这段代码运行的结果就是当前时间的”年月日时分秒 毫秒“的格式。
dateFormat是一个SimpleDateFormat对象,它通过构造函数初始化,就确定了是什么格式。
"yyyy-MM-dd HH:mm:ss SSS"就是格式,yyyy代表四个字符的年份,MM代表两个字符月份,dd代表两个字符的日期,HH代表小时,mm代表分钟,ss代表秒,SSS代表毫秒,因为毫秒是1000以内的所以需要三位。
你可以根据需要格式化一个日期,然后打印。
要注意,你不能随意更改字母的数量,例如年份写成yy,那么就是年份的后两位,如果是yyy,那么可能就是没有意义的一个格式,那么就会使用默认的4位表达年份。
调用的format函数,就是把日期(在这里是一个new Date(),这个Date对象表示当前时间)格式化成字符串。