一、java.util.Date
java.util.Date
这个日期类,它的对象表示一个特定的瞬间,精确到毫秒
。
本质上也是表示的是一个时间,标准纪元是从 1970.01.01
这天0
点开始到某一个时刻的毫秒数。类型是long
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
//Sun Jun 03 12:38:28 CST 2018
}
}
1.1 部分源码
public class Date
implements java.io.Serializable, Cloneable, Comparable<Date>
{
private transient long fastTime;
/**
* 构造器
*/
public Date() {
this(System.currentTimeMillis());//调用下面的构造方法
}
/**
* 构造器,传入一个long类型的参数; 将传入的时间变化成为指定的时间规范
*/
public Date(long date) {
fastTime = date;
}
/**
* 比较两个时间:方法
*/
public boolean before(Date when) {
return getMillisOf(this) < getMillisOf(when);
}
public boolean after(Date when) {
return getMillisOf(this) > getMillisOf(when);
}
/**
* 重写equals 方法
*/
public boolean equals(Object obj) {
return obj instanceof Date && getTime() == ((Date) obj).getTime();
}
/**
* 转化为毫秒
*/
public long getTime() {
return getTimeImpl();
}
private final long getTimeImpl() {
if (cdate != null && !cdate.isNormalized()) {
normalize();
}
return fastTime;
}
}
1.2 API
这个类大量的 setter 和 getter 方法都已经过时了。只有少量的方法可以使用。
二、DateFormat和SimpleDateFormat_时间和字符串的互相转换
2.1 API
方法 | 描述 |
| 将一个 Date 格式化为日期/时间字符串。 |
| 从给定字符串的开始解析文本,以生成一个日期。 |
java.text.DateFormat
中两个API
2.2 应用案例
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestSimpleDateFormat {
public static void main(String[] args) {
//1. 将日期转化为特定格式的字符串
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String strDate = format.format(date);
System.out.println(strDate); //2018-06-03 13:14:21
//2. 将特定格式的字符串转化为日期
String strDate1 = "2018年06月03日 13时14分21秒"; //注意格式需要匹配
DateFormat format1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
try {
Date date1 = format1.parse(strDate1);
System.out.println(date1);//Sun Jun 03 13:14:21 CST 2018
} catch (ParseException e) {
e.printStackTrace();
}
}
}
三、Calendar和GregorianCalendar
Calendar
的很多属性都静态变量,可以通过类名直接访问,就不需要对象了。Calendar. MONTH
使用这个类来替代Date中很多过时的方法。
3.1 Date、String、Calendar类型之间的转化
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TestCalendar {
public static void main(String[] args) {
calendarToString();
stringToCalendar();
dateToString();
stringToDate();
dateToCalendar();
calendarToDate();
}
private static void calendarToDate() {
//6.Calendar转化Date
Calendar calendar = Calendar.getInstance();
Date date =calendar.getTime();
}
private static void dateToCalendar() {
//5.Date 转化Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
}
private static void stringToDate() {
// 4.String 转化Date
String str="2018-6-3";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
try {
Date birthday = sdf.parse(str);
System.out.println(birthday);
} catch (ParseException e) {
e.printStackTrace();
}
}
private static void dateToString() {
//3.Date 转化String
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
String dateStr=sdf.format(new Date());
System.out.println(dateStr);
}
private static void stringToCalendar() {
// 2.String 转化Calendar
String str="2018-06-03";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println(calendar.getTime());
}
private static void calendarToString() {
//1.Calendar 转化 String
//获取当前时间的具体情况,如年,月,日,week,date,分,秒等
Calendar calendar = Calendar.getInstance(); //获取实例
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = sdf.format(calendar.getTime());
System.out.println(dateStr);
}
}
四、其他
java.lang.Date 中诸多方法已经过时,多使用Calendar
中的静态属性替代。
例如:
int getYear()
已过时。 从 JDK 1.1 开始,由Calendar.get(Calendar.YEAR) - 1900
取代。
int year = Calendar.getInstance().get(Calendar.YEAR);// 获得当前年份
参考
- 可以参考文档(不推荐) java 日期与字符串之间的转换
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 高琪三百集视频