Idea测试在反射模块中
1、第一代日期 Date(重点)
- java.util.Date包下
2. 获取当前时间
//获取当前系统时间,默认的输出日期格式是国外的,因此需要对格式进行转换
Date d1 = new Date();
System.out.println("国外格式:"+d1);
FormatDate(d1);
3. 格式化时间
//格式转化 创建SimpleDateFormat可以指定相应的格式
//y年 M月 d天 E是星期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
String format = sdf.format(date);
System.out.println("转化格式:"+format);
4. 将毫秒转化为时间
//将毫秒数转化成对应的时间
Date d2 = new Date(12345679);
System.out.println(d2);
FormatDate(d2);
5. 将格式化后的字符串转化为Date
//可以将一个格式化的字符串转成对应的Date
String s = "1999年01年01月 10:13:12 星期一";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");
try {
Date d3 = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
2、Mysql 和 java sql转化(重点)
在SMBMS项目的练习中遇到这样一个问题!
通过指定时间段内的总金额!
sql语句很简单,应该是
<select id="statistics" parameterType="java.sql.Date" resultType="float">
select sum(totalPrice) from smbms_bill where (creationDate between #{d1} and #{d2}) and isPayment = 2
</select>
同时返回的值应该封箱未Float,因为如果没有找到的话会返回null,报空指针异常
当然进入到本文正题,传入的是一个 java.sql.Date ,而前端传来的应该是 java.util.Date或者String,改如何转化?
以下是Date的总结
public class TimeTest {
public static void main(String[] args) {
Date date = new Date();
// 一、获取当前系统时间和日期并格式化输出:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String dateTime = df.format(date); // Formats a Date into a date/time string.
System.out.println(dateTime); // 2017-09-24 23:33:20
// 二、Date转换为Datetime
long longTime = date.getTime();
Timestamp timestamp = new Timestamp(longTime);
System.out.println(timestamp); // 2017-09-24 23:33:20.655
// 三、String转换为Date
String strTime = "2017-09-24 12:00:01";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = null;
try {
date1 = sdf1.parse(strTime);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date1); // Sun Sep 24 12:00:01 CST 2017
// 四、Date转换为String
Date date2 = new Date();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String str1 = format.format(date2);
System.out.println(str1); // 2017-09-24
// 五、String转化为java.sql.Date
String str2 = "2017-12-01";
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
java.sql.Date sDate = null;
try {
java.util.Date date3 = sdf2.parse(str2);
sDate = new java.sql.Date(date3.getTime());
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(sDate); // 2017-12-01
}
}
java.util.Date --> java.sql.Date getTime()方法
java.sql.Date sDate = new java.sql.Date(java.util.Date.getTime());
3、第二代日期 Calendar (很垃圾,线程不安全)
- Calendar 是一个抽象类, 并且构造器是private
- 可以通过 getInstance() 来获取实例
- Calendar 提供了大量的方法和字段 提供使用
- Calender 没有专门化的格式方法,所以需要程序员自己来组合显示
- 日期12进制,还需要修改
public class Calendar02 {
public static void main(String[] args) {
//抽象类,构造方法私有,只能通过方法获取
Calendar c = Calendar.getInstance();
System.out.println(c);
System.out.println("年:"+c.get(Calendar.YEAR));
//月需要加1,因为从零开始编号
System.out.println("月:"+c.get(Calendar.MONTH+1));
System.out.println("小时:"+c.get(Calendar.HOUR));
}
}
4、第三代 LocalDate LocalTime LocalDateTime
1. LocalDate :只包含日期(年月日)
2. LocalTime:只包含时间(时分秒)
3. LocalDateTime:包含日期+时间
public class LocalDateTime03 {
public static void main(String[] args) {
//使用now表示当前日期时间的 对象
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
System.out.println(ldt.getYear());
}
}
格式化日期
//格式化时间 使用DateTimeFormatter 对象来格式化
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH小时mm分钟ss秒");
String format = dtf.format(ldt);
System.out.println(format);