Java date类获取时间
在开发中经常会用到时间和日期,System
类的currentTimeMillis
方法可以返回当前时间的毫秒值,除此之外 Date 类也可以获取当前时间信息,精确到毫秒。继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。
//获取当前时间的毫秒值
long time = System.currentTimeMillis();
//创建日期对象,把当前的毫秒值转成日期对象
Date date = new Date(time);
System.out.println(date);//Wed Dec 11 16:42:06 CST 2013
可是将毫秒值转成日期后,输出的格式不利于我们阅读,继续查阅API,Date中有getYear、getMouth等方法,可以他们已经过时,继续往下查阅,看到了toString方法,点开查阅原来是上面打印的date就是默认调用了这个toString方法,并且在这个方法下面还有让我们参见toLocaleString
方法,点进去,这个方法又过时了,从 JDK 1.1 开始,由 DateFormat.format(Date date)
取代。
既然这个方法被DateFormat.format(Date date)
取代,那么就要去查阅DateFormat类。
DateFormat类介绍
查阅DateFormat类介绍:DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。
原来这个类可以帮我们完成日期和文本之间的转换。继续阅读API,DateFormat 可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。要格式化一个当前语言环境下的日期,可使用某个静态工厂方法: myString = DateFormat.getDateInstance().format(myDate)
;
// 获取日期格式器对象,在获取格式器对象时可以指定风格,风格包括 FULL、LONG、MEDIUM 和 SHORT
DateFormat format = DateFormat.getDateInstance(DateFormat.LONG);
//对日期进行格式化
String str_time = format.format(date);
System.out.println(str_time);//2013年12月11日
Calendar类介绍
我们可以通过Date获取到日期对象,使用DateFormat方法可以把日期进行格式化,可我们想获取当前日期对应的具体的年,具体的月,具体的日,等信息,怎么获取呢?
找到Date继续查阅,其中有getYear等方法,只是这些方法过时了,并且这些方法的描述中告诉我们参加Calendar类。
查阅Calendar类的API描述,发现原来Calendar类是专门用于描述日历的类,它中维护了一个map集合,在这个集合中存放着所有和日期相关的信息。
public class DateDemo {
public static void main(String[] args) {
//获取日历对象
Calendar c = Calendar.getInstance();
System.out.println(c);//打印出了一个map集合,其中描述日期的所有信息
//获取年
int year = c.get(Calendar.YEAR);
//获取月,月是从0开始计算的
int mouth = c.get(Calendar.MONTH)+1;
//获取日
int day = c.get(Calendar.DAY_OF_MONTH);
//获取星期,由于老外们把星期日当作一周的第一天,所有星期日 返回对应的数字为1
String week = getWeek(c.get(Calendar.DAY_OF_WEEK));
System.out.println(year+"年"+mouth+"月"+day+"日"+week);
}
public static String getWeek(int i) {
if(i<0 || i>7){
throw new RuntimeException(i+"没有对应的星期");
}
String[] weeks = {"",星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
return weeks[i];
}
}