时间类
java.util.Date 日期类
java.sql.Date 子类 年月日
java.sql.Time 子类 时分秒
java.sql.Timestamp 子类 年月日时分秒
java.util.Calendar 日历类
java.text.DataFormat 日期格式化类
java.text.SimpleDateFormat 子类
Java标准库有两套处理日期和时间的API:
- 一套定义在
java.util
这个包里面,主要包括Date
、Calendar
和TimeZone
这几个类; - 一套新的API是在Java 8引入的,定义在
java.time
这个包里面,主要包括LocalDateTime
、ZonedDateTime
、ZoneId
等。
Date
ava.sql.Date,Time,Timestamp的父类,是从1900年开始到现在的时间。因为Date的设计具有"千年虫"以及"时区"的问题,所以Date中的大部分方法已经不建议使用了,被java.util.Calendar类所取代。
//从1970年1月1日00:00开始至今所有的毫秒值
System.out.println(System.currentTimeMillis());
java.util.Date date = new java.util.Date(); //根据currentTimeMillis来创建当前的日期对象
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
java.sql.Time sqlTime = new java.sql.Time(date.getTime());
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(date.getTime());
System.out.println("java.util.Date :" + date);
System.out.println("java.sql.Date :" + sqlDate);
System.out.println("java.sql.Time :" + sqlTime);
System.out.println("java.sql.Timestamp :" + sqlTimestamp);
Date date =new Date();
System.out.println(date);
//2.Data获取1970年1月1日 8点0分0秒到现在的毫秒数
Date date2 =new Date();
System.out.println(date2.getTime());
//3.Calendar获取默认格式的日期
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
打印本地时区表示的日期和时间时,不同的计算机可能会有不同的结果。如果我们想要针对用户的偏好精确地控制日期和时间的格式,就可以使用SimpleDateFormat
对一个Date
进行转换。它用预定义的字符串表示格式化:
- yyyy:年
- MM:月
- dd: 日
- HH: 小时
- mm: 分钟
- ss: 秒
import java.text.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
// 获取当前时间:
Date date = new Date();
var sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(date));
}
}
常见的时间格式
public class DateTest04 {
public static void main(String[] args) throws ParseException {
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormat.parse("2015-08-08 15:30:31");
System.out.println(date);
}
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-d");
Date date = dateFormat.parse("2015-12-12");
System.out.println(date);
}
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M-d H:m:s");
Date date = dateFormat.parse("2015-12-12 18:8:30");
System.out.println(date);
}
{
SimpleDateFormat dateFormat = new SimpleDateFormat("MMM d, yyyy h:m:s aa", Locale.ENGLISH);
Date date = dateFormat.parse("Aug 28, 2015 6:8:30 PM");
System.out.println(date);
}
}
}
Calendar
Calendar
可以用于获取并设置年、月、日、时、分、秒,它和Date
比,主要多了一个可以做简单的日期和时间运算的功能。
import java.util.*;
public class Main {
public static void main(String[] args) {
// 获取当前时间:
Calendar c = Calendar.getInstance();
int y = c.get(Calendar.YEAR);
int m = 1 + c.get(Calendar.MONTH);
int d = c.get(Calendar.DAY_OF_MONTH);
int w = c.get(Calendar.DAY_OF_WEEK);
int hh = c.get(Calendar.HOUR_OF_DAY);
int mm = c.get(Calendar.MINUTE);
int ss = c.get(Calendar.SECOND);
int ms = c.get(Calendar.MILLISECOND);
System.out.println(y + "-" + m + "-" + d + " " + w + " " + hh + ":" + mm + ":" + ss + "." + ms);
}
}
Calendar
获取年月日这些信息变成了get(int field)
,返回的年份不必转换,返回的月份仍然要加1,返回的星期要特别注意,1
~7
分别表示周日,周一,……,周六。
Calendar
只有一种方式获取,即Calendar.getInstance()
,而且一获取到就是当前时间。如果我们想给它设置成特定的一个日期和时间,就必须先清除所有字段:
import java.text.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
// 当前时间:
Calendar c = Calendar.getInstance();
// 清除所有:
c.clear();
// 设置2019年:
c.set(Calendar.YEAR, 2019);
// 设置9月:注意8表示9月:
c.set(Calendar.MONTH, 8);
// 设置2日:
c.set(Calendar.DATE, 2);
// 设置时间:
c.set(Calendar.HOUR_OF_DAY, 21);
c.set(Calendar.MINUTE, 22);
c.set(Calendar.SECOND, 23);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
// 2019-09-02 21:22:23
}
}
利用Calendar.getTime()
可以将一个Calendar
对象转换成Date
对象,然后就可以用SimpleDateFormat
进行格式化了。