java.util.Date (yyyy-MM-dd HH:mm:ss)
Date日期类型在开发过程中主要用于
- 将日期按照一定的格式进行格式化String(格式化输出)
- 获取当前系统时间,new Date(), getTime(获取当前日期距离元年的ms数,返回类型为Long)
- 映射为数据库的Date类型
- 日期早晚的比较
而对于日期的计算,Date类型中获取年月日时分秒的方法都已经被废弃。
// String parse to Date
String dateStr = "2019-11-24 11:08:28";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date strDate = format.parse(dateStr);
log.info("String parse to Date: " + strDate.toString());
// Date parse to String
String dateToStr = format.format(strDate);
Assert.assertEquals(dateStr, dateToStr);
log.info("Date parse to Date: " + dateToStr);
// Date parse to Long(Millisecond)/ms since January 1, 1970, 00:00:00 GMT
Long dateMillisecond = strDate.getTime();
log.info("Date parse to Millisecond: " + dateMillisecond);
// Long(Millisecond) parse to Date
Date millisecondDate = new Date(dateMillisecond);
Assert.assertEquals(millisecondDate, strDate);
log.info("Millisecond parse to Date: " + millisecondDate.toString());
// 日期早晚的比较,本质上是转换为毫秒数,再进行大小的比较
String startTime = "2019-11-24 19:40:00";
String endTime = "2019-11-24 19:50:00";
Date startDate = format.parse(startTime);
Date endDate = format.parse(endTime);
Assert.assertTrue(startDate.before(endDate));
Assert.assertTrue(endDate.after(startDate));
java.util.Calendar 日历
Calendar 日历类型主要用于
- 可以获取当前的年月日时分秒
- 可以和日期类型Date相互转换
- 用于日期的计算
java.util.Calendar在Java应用程序的操作中完全替代java.util.Date。
// 获取年,月,日,时,分,秒, 输出结果为: 2019年11月24日19时0分7秒, 注意月份从0开始
Calendar calendar = Calendar.getInstance();
log.info(calendar.get(Calendar.YEAR) + "年" + (calendar.get(Calendar.MONTH) + 1) + "月"
+ calendar.get(Calendar.DAY_OF_MONTH) + "日" + calendar.get(Calendar.HOUR_OF_DAY) + "时"
+ calendar.get(Calendar.MINUTE) + "分" + calendar.get(Calendar.SECOND) + "秒" );
// Calendar to Date
Date date = calendar.getTime();
// Date to Calendar
calendar.setTime(date);
// 获取下一年的日期, 获取前一年的日期
log.info(calendar.getTime().toString());
calendar.add(Calendar.YEAR, 1);
log.info(calendar.getTime().toString());
calendar.add(Calendar.YEAR, -1);
log.info(calendar.getTime().toString());
数据库类型映射
Java 不同的日期存储格式如下
java.util.Date : yyyy-MM-dd HH:mm:ss
java.sql.Date : yyyy-MM-dd
java.sql.Time : HH:mm:ss
java.sql.Timestamp : yyyy-MM-dd HH:mm:ss[.nanos] (毫微秒)
java.util.Date为java.sql.Date, java.sql.Time, java.sql.Timestamp的父类,子类对父类做了扩充和包装。
Mysql的日期类型存储格式如下
Date : yyyy-MM-dd
Datetime : yyyy-MM-dd HH:mm:ss
Time : HH:mm:ss
Timestamp : yyyy-MM-dd HH:mm:ss[.fraction] (毫秒)
Mysql 的Timestamp类型为时间戳,精确到ms,表示距离January 1, 1970, 00:00:00 GMT的时间差。
Mysql 的日期类型和Java的映射如下
java.util.Date // Datetime
java.sql.Date // Date
java.sql.Time // Time
java.lang.Long // Timestamp
Oracle的日期类型存储格式如下
DATE : yyyy-MM-dd HH:mm:ss
TIMESTAMP : yyyy-MM-dd HH:mm:ss[.nanos] (纳秒)
Oracle 的日期类型和Java的映射如下
java.util.Date // DATE
java.sql.Timesatmp // TIMESTAMP